Nodejs网络 - 实时通信

时间:2010-10-09 18:50:55

标签: real-time node.js

我是node.js的新手,我想问一个关于它是如何工作的简单问题。

我过去曾使用FM进行客户端与客户端的通信和实时应用程序。例如,要创建协作应用程序,您需要查看其他用户正在执行的操作。我想用NodeJS探索它。

我有几个问题:

1)NodeJ如何处理服务器到客户端的通信?您是否可以将信息推送给客户?或者客户需要不断向服务器发出请求以查看是否有任何变化?

2)服务器和客户端之间是否存在永久连接?<​​/ p>

3)如何处理客户端到客户端的通信(当然是通过服务器)?

提前致谢。

2 个答案:

答案 0 :(得分:3)

  

3)如何处理客户端到客户端   沟通(当然是通过   服务器)?

一个简单的解决方案是在服务器和每个客户端之间打开一个websocket:

[客户A]&lt; == websocket ==&gt; [服务器]&lt; == websocket ==&gt; [客户B]

例如,如果你使用Socket.IO,就可以很容易地以这种方式进行客户端到客户端的通信。

当服务器从一个客户端收到消息时,您只需将其广播给所有客户端,或根据您的使用情况将其发送给一个特定的客户端。

使用Socket.IO的一些示例代码:

var socket = io.listen(server);
socket.on('connection', function(client) {
  client.on('message', function(msg) {
    broadcast(msg); // broadcast message to all clients
    // OR
    socket.clients[session_id].send(msg); // send message to one client
  });

  client.on('disconnect', function( ) {
    console.log('Client Disconnected.');
  });
});

答案 1 :(得分:1)

最近有很多关于Node.js的问题;)

  1. 正如Toby所说,Node可以做HTTP,TCP / UDP和Unix套接字。建立永久连接时,您当然可以将数据推送到客户端。

  2. 由于您在谈论基于浏览器的客户端,因此有很多方法可以实现这一点。例如,您可以使用带有Flash回退的WebSockets。如果您对低级详细信息不感兴趣并想要一个完整的包,请查看Socket.IO

  3. WebSockets无法做到这一点,据我所知,Flash无法做到这一点。因此,除非您想要输入Java / Silverlight,否则您需要通过服务器路由请求。