一个想破头的实现问题
发布于 2天前 作者 Kyoloro 268 次浏览 来自 问答

node做服务器监听时,监听到data,通过回调获得data值,我该如何在另一边客户端来请求时,将data发送过去,监听事件我已经初始化好了的。我的意思是如果在客户端请求那边写入事件监听,那就会开启很多监听事件。如果把监听得到的data存入一个对象中,我在客户端请求时,从这个对象中拿的话,我只能拿到上次存入的data,永远不可能拿到最新的data(会出现先后问题)…

10 回复

就是我如何知道服务器那边响应给我的数据是什么?

楼主是想要 ack 模式吗? 用的是 socket.io ?

@idreamshen require(‘net’) 模块里的 new socket,我connect 另一端写的服务器

@Kyoloro socket长连接的话需要用一个json给所有的socket编号:

var pool = {
                   '1': socket1,
                   '2': socket2,
                   '3': socket3
           }

后面拿到data的逻辑就是 data发给谁就 pool[target].write(data);

在编号之前,可能需要实现登陆逻辑,判断那个socket是谁。

看不懂问题。。。。

这貌似没有好的解决办法node只是增加了服务器反向通讯功能的Web实现。

@alsotang 已经解决了…原来 回调函数能作为参数传递,还能作为像指针一样的 跟一个标示符token存到一个json格式变量里面,放入监听事件的回调函数里面,监听事件触发响应到数据,然后通过返回的数据里的token去查json格式变量从而调用存在其中的回调函数,对应上参数就能实现功能了。。

@albin3 嗯 谢谢你,我想到 用json格式的变量 来存指向,但是就是没想到执行函数的回调函数 也能放入这个变量里,然后在事件监听到data时,调用这个存放的回调函数,就能实现发送了

@albin3 这个编号 就可以是伴随着 生成一个随机唯一token 作为标示符一起 发送。这样就知道谁是谁了.想通了

对应的伪代码 可以是这样: //chunk 为客户端请求数据 JSON格式
var chunk = request.payload.xxxx; this.sendData(chunk,function(err,data){ if(data){ //实现业务功能 }else{ //汇报相应地错误 } });

sendData:function(data,listener){ data.Token = random_Token(); LISTENERS[data.Token] = listener; server.write(data);//向另一端服务器发送数据 } //作监听事件 server.on('data’,function(data){ var token = data.token; var listener = LISTENERS[token]; listener(null,data);//调用回调函数,实现功能 });

回到顶部