是否可以从即将关闭的ZMQ套接字获取数据
Is it possible to get data from a ZMQ socket, that is about to be closed?
我需要实现ZMQ的一个位扩展,其中'REQ
'套接字有一个名为".request()
"的额外方法。
该方法可以接收多个参数,并且(这里我有问题)如果第一个参数是0,.request( 0, ... )
只发送消息,否则它必须等待10秒,如果此时我没有响应或错误,我必须.close()
套接字并再次打开它。
所以,问题是:我如何知道在ZMQ的扩展中,客户端连接到哪里,以便能够重新连接那里我的新套接字?
(我也需要使用promise,这就是为什么代码中出现"Q.deffer()
"以及所有这些内容)
var zmq = require('./pzmq');
var rq = zmq.socket('req');
var counter=0;
function onSuccess(msg) {
console.log('Response: '+msg);
console.log(msg instanceof Array);
}
function onError(err) {
console.log('Error: '+err);
}
rq.connect('tcp://127.0.0.1:8888');
console.log(rq.indentity);
// The "Hello" string is sent every second
reply = rq.request(0, counter++,4);
reply.then(onSuccess,onError);
这里我有ZMQ的一个小扩展,叫做pzmq
:
var zmq = require('zmq');
var Q = require('bluebird');
// Save the original socket method, we need it
var socket = zmq.socket;
// Create and store the wrapper method
zmq.socket = function(kind) {
// it uses the original method anyways, to get a zmq socket
var so = socket.call(zmq, kind);
if (kind == 'req') {
// if a 'req' socket is requested, then we add the extra method 2
so.request = request;
}
return so;
};
function request() {
var d = Q.defer();
var that = this;
var onResponse = function () {
console.log(arguments instanceof Array);
d.resolve(Array.prototype.slice.call(arguments));
that.removeListener('error', onError);
};
var onError = function (e) {
d.reject(e);
that.removeListener('message', onResponse);
};
this.once('message', onResponse); // set up the handler for only one message
this.once('error', onError); // set up the handler for only one
var argumentos = Array.prototype.slice.call(arguments);
var tiempo = argumentos[0];
if (tiempo==0){
this.send(argumentos);
}else{
//HERE IS THE PROBLEM
}
return d.promise;
}
缩写:否
龙:是的
ZeroMQ库允许您设置可扩展的消息传递框架,根据您的需求进行设计。灵活性是准则,你的设计和想象力的界限是主要的限制。
如果你需要.close()
/重新打开一个ZMQ套接字,你的应用程序应该创建它自己的、状态完整的连接管理器,它是可感知的&负责传输类设置、连接寻址、原型选择,最后但并非最不重要的是,.connect()
/.bind()
/ev.re-subscribe阶段的适当定时。
听起来好像很复杂?是的,尽管如此,还是没有"廉价的捷径"。底层库方法&属性根本无法"猜测"您的外部世界规则和优先级,因此轮到您指定+分析+设计+测试/验证应用程序层上的强制性功能/行为。
ZMQ将帮助您执行"休息"。
相关文章:
- 如何使用HTML5与UDP套接字通信
- 在node.js中写入ECONNRESET错误和套接字连接检查
- java,javascript签名的小程序(文件选择,ftp上传)安全性/套接字异常
- 套接字服务器向客户端广播,但不从两者接收
- 如何确定套接字中的变量是否匹配
- 如何通过网络套接字连接到树莓派上的Mosquitto经纪人
- 快速的套接字 io 实例/中间件
- PHP:Web套接字和html 5
- 无法从客户端发出套接字消息
- STOMP web套接字回调不'不起作用
- Will my'新对象'在套接字断开连接时被垃圾收集
- 套接字服务器在本地获得500毫秒的往返时间
- 将服务器托管的Web应用程序连接到本地Web套接字
- 通过套接字发送画布元素,JS中的最大堆栈大小
- 如何使用套接字将node.js与ada连接起来
- 套接字io客户端网络::ERR_CONNECTION_REFUSED
- 节点.js设置套接字 ID
- node.js 需要太多的 TCP 套接字
- 从一个套接字发出两个事件
- 是否可以从即将关闭的ZMQ套接字获取数据