1

在阅读 zeromq 的基准测试结果后,我想知道是否可以尝试通过 zeromq 上的 HTTP GET 调用访问 ReSTFul API。我想测试 zeromq 是否可以提供低延迟请求-回复机制,与 jersey 客户端 API、HTTPurl、Apache hc 等其他替代方案相比。我想在 java 中实现这个,所以这就是我正在尝试的,根据教程

XREP -> HTTP 客户端 有了这个,您可以重用在 HTTP 服务器上运行的现有 Web 应用程序作为工作队列的后端工作人员。这就像一个反向 HTTP 代理,它在多个后端 HTTP 服务器之间进行负载平衡。

ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket requester2 = context.socket(ZMQ.XREP);
requester2.connect("http://domainURL/path");

但这是错误的,因为我得到

java.lang.UnsupportedOperationException: http

我知道我没有正确编码,但是如果提供了 java 中的任何指南或代码片段会有所帮助吗?

编辑 我找到了一个资源,其中 python 代码将远程 Web 服务调用为

import json
import zmq

# set up zmq socket
sock = zmq.Context.instance().socket(zmq.REQ)
sock.connect('ipc:///tmp/zurl-req')

# send request
req = {
  'method': 'GET',
  'uri': 'http://example.com/path'
}
sock.send('J' + json.dumps(req))

# print response
print json.loads(sock.recv()[1:])

所以我试图修改我的java代码如下:

import org.zeromq.ZMQ;

public class hwclient {

    public static void main(String[] args) {

        ZMQ.Context context2 = ZMQ.context(1);
        ZMQ.Socket sock = context2.socket(ZMQ.REQ);
        sock.connect("ipc:///tmp/zurl-req");
        String req = "{\n" +
                "  'method': 'GET',\n" +
                "  'uri': 'http://domainURI/path/" +
                "}\n";
        sock.send(req);
        System.out.println("-->" + new String(sock.recv(0)));
        context2.term();
    }
}

但现在的问题是我不知道应该用什么值代替"ipc:///tmp/zurl-req"

4

1 回答 1

0

Zeromq 不提供高级 http 协议工具。

将 tcp 与 STREAM 套接字类型一起使用。

ZMQ.Context ctx = ZMQ.context(1);
ZMQ.Socket sock = ctx.socket(ZMQ.STREAM);
sock.connect("tcp://ip:port");
String req = "GET / HTTP/1.0\r\n\r\n";
sock.send(req);

像这样的东西。

您最好阅读有关本机模式的文档:单击

于 2015-12-01T13:51:30.147 回答