关于net监听与收发的问题
请问如果我要实现这样的功能应该如何做:
- server监听client,然后就这样放着。
- server可以主动地(比如post来了数据然后让server发消息)去向client发送一些信息并且等待client返回信息。
- client接受了server的消息后运行一些程序然后将结果反馈给server。
跪求啊T_T
7 回复
比如说
var net = require('net');
var server = net.createServer(function(sock) {
});
这样。。 然后我在express里面有:
app.post('/submit', function(req, res) {
//我想在这里向client发送data。。
});
跪求如何做到。。
要看你的client是啥,是ios就好办啦
@yorkie client也是一个js程序。。它执行一些东西后把结果返回给server。。而且因为某些原因,此处server和client不能颠倒
那就用消息队列呗
- 一个是用类似zmq这样的 具体你需要自己研究
- 另一个就是resque这样基于redis来实现通知客户端的需求,然后自己用http实现req/res的功能,服务器通过redis通知客户端 然后客户端掉用服务器的http api,我自己偏向于后者,因为http的社区比net丰富得多。
@yorkie 我突发奇想:如果这样可以不:
- 原来的server端变成一个client和一个server
- post请求到达的时候用client通知本地server
- server广播消息到每个client
- 原client收到消息,处理后发送到server
不如直接用socket.io。创建一个Socket.IO server,绑定到一个HTTP server。
- HTTP Server接收到POST请求后,在路由处理函数中,调用
socket.io-client
模块,创建一个client,向Socket.io Server发送消息,假设对应的事件是server-notification
; - Socker.io server在
connection
事件处理函数中,定义socket
对象的下列事件处理函数:server-notification
- 收到通知后,调用socket.broadcast.emit
向所有的client广播事件client-call
;client-result
- 处理client发送到server的结果
- 调用socket.io-client创建Socket.io的client,在
client-call
事件处理函数中:实现处理逻辑,最后调用socket.emit('client-result', result)
返回结果。
@bnuhero 谢啦~解决了