V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phpuser
V2EX  ›  Node.js

请问,服务器主动往客户端发包如何实现?

  •  
  •   phpuser · 2013-06-06 10:43:02 +08:00 · 4427 次点击
    这是一个创建于 3975 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有个程序处理流程如下:
    1.Client 发包A到 Server
    2.Server预处理(入库,入队列等),返回B
    3.后台进程,处理队列中的数据,
    4.Server定时队列中查早已经处理完的数据主动发C包给Client,通知结果。

    其中C/S非常繁忙。

    Q:

    1.在什么位置放置 Server 主动发包的逻辑,什么方式实现?保存所有连接Timer外,还有什么方法?
    2.处理发送C包的时候会否阻塞其他处理逻辑?
    3.(如果不存在2)是否可能造成包混乱是 -- Server同时发B和C,在Client中接收是否会有问题


    另外,我了解了下node是单线程的,那么同时收到多个连接的包时,是不是只能顺序一个个处理完再下一个?如果每个包处理时间很长那么不是造成处理能力低下?
    (以前C写这些东西select后一般fork一个新进程处理)

    Node.js新手,请指教,谢谢。
    ..早上发现以上问题如何找google关键字都不会,:(
    6 条回复    1970-01-01 08:00:00 +08:00
    ForgotFun
        1
    ForgotFun  
       2013-06-06 11:00:22 +08:00
    想要主动发数据给客户端,那你必须保持着条连接不断开。不然你得用UDP打洞了。
    ywu
        2
    ywu  
       2013-06-06 11:06:45 +08:00
    lookhi
        3
    lookhi  
       2013-06-06 11:07:10 +08:00
    都是C/S了。
    让C那边发了后就不管,间隔一段时间来检查下发后的处理情况。
    S这边提供一个Query借口就好了。
    不用长链接了
    ForgotFun
        4
    ForgotFun  
       2013-06-06 11:14:16 +08:00
    @lookhi 我倒是不认为,你用查询模式,很多时候数据交换很麻烦。又会涉及到进程间的通信问题了。
    zieglar
        5
    zieglar  
       2013-06-06 11:20:02 +08:00
    mq配合socketio呗
    phpuser
        6
    phpuser  
    OP
       2013-06-10 13:38:18 +08:00
    谢谢各位,最后在各种事件定义后面加了个Timer,暂时满足要求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1121 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:56 · PVG 06:56 · LAX 15:56 · JFK 18:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.