关于net监听与收发的问题
发布于 3个月前 作者 jcpwfloi 450 次浏览 来自 问答

请问如果我要实现这样的功能应该如何做:

  • 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

@jcpwfloi

不如直接用socket.io。创建一个Socket.IO server,绑定到一个HTTP server。

  1. HTTP Server接收到POST请求后,在路由处理函数中,调用socket.io-client模块,创建一个client,向Socket.io Server发送消息,假设对应的事件是server-notification
  2. Socker.io server在connection事件处理函数中,定义socket对象的下列事件处理函数:
    • server-notification - 收到通知后,调用socket.broadcast.emit向所有的client广播事件client-call
    • client-result - 处理client发送到server的结果
  3. 调用socket.io-client创建Socket.io的client,在client-call事件处理函数中:实现处理逻辑,最后调用socket.emit('client-result', result)返回结果。
回到顶部