Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用.poll()与使用.poll()有什么区别。ZeroMQ中的recv()方法?_Java_Zeromq - Fatal编程技术网

Java 使用.poll()与使用.poll()有什么区别。ZeroMQ中的recv()方法?

Java 使用.poll()与使用.poll()有什么区别。ZeroMQ中的recv()方法?,java,zeromq,Java,Zeromq,在ZeroMQPUB/SUB模式教程中,有一个.poll()方法: ZMQ.Poller items = new ZMQ.Poller (1); while (!Thread.currentThread ().isInterrupted ()) { byte[] message; items.poll(); if (items.pollin(0)) { message = subscriber.recv(0);

在ZeroMQ
PUB/SUB
模式教程中,有一个
.poll()
方法:

ZMQ.Poller items = new ZMQ.Poller (1);
while (!Thread.currentThread ().isInterrupted ()) {
        byte[] message;
        items.poll();

        if (items.pollin(0)) {
            message = subscriber.recv(0);
            System.out.println("received message:" + message);
        }
 }
此方法允许您检查连接的状态。但是,
.poll()
方法似乎是没有超时的“另一个”
.recv()

它们都会将线程/程序挂起,直到收到数据

使用
.poll()
只会让程序停留在
.poll()
而不是
.recv()

我错过了什么?

recv()
只等待来自1个ZeroMQ套接字的消息,而
poll()
允许您等待来自多个ZeroMQ套接字的消息

Poller
还允许您在等待消息时轻松指定超时

注意,您的代码似乎错过了对
items.register(订户,ZMQ.Poller.POLLIN)

recv()
仅等待来自1个ZeroMQ套接字的消息,而
poll()
允许您等待来自多个ZeroMQ套接字的消息

Poller
还允许您在等待消息时轻松指定超时

注意,您的代码似乎错过了对
items.register(订户,ZMQ.Poller.POLLIN)

ZeroMQ在这里引入了两种截然不同的机制:
.recv()
方法:
.recv(,)
是一种方法,可以,但不必阻止尝试接收
一个发送到善良用户手中的消息,以便进一步处理

随着语法的实施,编码器必须指定,方法应该从哪个ZeroMQ可伸缩正式通信原型的访问点尝试选择下一个FIFO消息或多部分消息的一部分

ZeroMQ确保了消息的原子传递:对等方要么接收消息的所有消息部分,要么根本不接收。除可用内存外,消息部分的总数不受限制

处理多部分消息的应用程序在调用
ZMQ\u recvmg()
后,必须在
ZMQ\u getsockopt(3)
选项中使用并进一步研究
ZMQ\u RCVMORE
,以确定是否还有其他部分要接收


.poll()
方法不同(但它可能“快捷”某些逻辑): 在使用
.poll()
方法之前,有一些任务需要首先设置
.Poller()
实例行为的详细信息

ZeroMQ将此作为一种机制,用于在一组访问点上多路复用越来越多的输入/输出事件(包括ZeroMQ智能套接字和(在较新的API版本中)以及标准的普通O/S套接字。此机制反映了标准套接字的
poll()
系统调用

Poller()
实例可以被指示
.poll()
一个或多个“本地”访问点,询问它们的内部状态,并可以接收{zero | one | more}-在任何指定事件到达所列接入点的“本地”端之前,根据呼叫设置、查询资源的实际状态以及超时是否已结束,回答问题

ZeroMQ原始API为此定义了:

int zmq_poll ( zmq_pollitem_t *items, int nitems, long timeout );
而相应的语言绑定可能会将此API重新包装为某种更高级别的帮助器方法(不必手动声明有多少记录
nitems
one尝试传入
*项
,一旦在运行时知道MUX事件对象的大小,就在调用低级API之前——因此,请重新检查ZeroMQ绑定文档,以了解向用户代码公开的确切语法)

如O/p中所述,如果调用的
.poll()
值为
超时==-1
,在
*项中只有一个访问点,则
.poll()
将无限期阻止,直到为
{zmq\u POLLIN}设置的指定
zmq\u pollitem\t
上发生请求的事件
,因此在这里,阻止用户代码有效地反映了
.recv()
在该位置所做的事情。然而,各自的机制有很大不同。

ZeroMQ在这里引入了两种非常不同的机制:
.recv()
方法:
.recv(,)
是一种方法,可以,但不必阻止尝试接收
一个发送到善良用户手中的消息,以便进一步处理

随着语法的实施,编码器必须指定,方法应该从哪个ZeroMQ可伸缩正式通信原型的访问点尝试选择下一个FIFO消息或多部分消息的一部分

ZeroMQ确保消息的原子传递:对等方应接收消息的所有消息部分,或根本不接收。除可用内存外,消息部分的总数不受限制

处理多部分消息的应用程序在调用
ZMQ\u recvmg()
后,必须在
ZMQ\u getsockopt(3)
选项中使用并进一步研究
ZMQ\u RCVMORE
,以确定是否还有其他部分要接收


.poll()
方法不同(但它可能“快捷”某些逻辑): 在使用
.poll()
方法之前,有一些任务需要首先设置
.Poller()
实例行为的详细信息

ZeroMQ将此作为一种机制,用于在一组访问点上多路复用越来越多的输入/输出事件(包括ZeroMQ智能套接字和(在较新的API版本中)以及标准的普通O/S套接字。此机制反映了标准套接字的
poll()
系统调用

Pol