2010-10-09 85 views
4

我是新來的node.js,我想問一個關於它是如何工作的簡單問題。Nodejs網絡 - 實時通信

我以前在客戶端與客戶端的通信和實時應用程序中使用過FM。例如,創建一個協作應用程序,您需要查看其他用戶正在做什麼。我想探索使用NodeJS。

我有幾個問題:

1)如何處理的NodeJS服務器到客戶端通信?您是否有任何方式將信息推送給客戶?或者客戶端需要不斷向服務器發出請求,以查看是否有任何更改?

2)服務器和客戶端之間是否存在永久連接等問題?

3)如何處理客戶端到客戶端的通信(當然是通過服務器)?

在此先感謝。

+0

節點本身可以​​說話HTTP以及較低級別的TCP&Unix套接字。連接的客戶端因此決定了一些功能。你在這裏談論的是瀏覽器客戶端還是其他類型的客戶端? – 2010-10-09 22:48:48

+0

僅限瀏覽器客戶端! – oscarm 2010-10-09 22:55:29

+0

Socket.IO是瀏覽器客戶端的方式,如下所示 – 2010-10-10 06:22:48

回答

3

3)如何能夠處理客戶端到客戶端 通信(當然通了 服務器)?

一個簡單的解決方案是打開服務器和每個客戶機之間的的WebSocket:

[客戶端A] < == WebSocket的==> [服務器] < == WebSocket的==> [客戶端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.'); 
    }); 
}); 
+0

謝謝,這是跨平臺嗎? – oscarm 2010-10-10 16:37:39

+0

跨平臺是什麼意思?我的示例代碼是Socket.IO節點,即Socket.IO的服務器端組件。至於客戶端,是的,它應該與所有瀏覽器一起工作,這要歸功於許多後備。 – Franck 2010-10-10 20:08:53

1

相當多的從你的Node.js問題最近;)

  1. 由於託比已經說過,節點可以做HTTP,TCP/UDP和Unix套接字。當您建立永久連接時,您當然可以將數據推送給客戶端。

  2. 由於您在談論基於瀏覽器的客戶端,因此有許多方法可以實現此目標。例如,您可以使用帶有Flash後備的WebSockets。如果您對底層細節不感興趣並想要一個完整的包,請看Socket.IO

  3. WebSockets無法做到這一點,Flash也無法做到,據我所知。所以除非你想進入Java/Silverlight領域,否則你需要通過服務器路由請求。

+0

謝謝!這些問題基於我在Flash Platform和Flash Media Server方面的經驗。通過FMS,客戶端連接後,您可以將消息從客戶端路由到另一個客戶端。這是我想用Node.JS測試的那種功能。我需要找出它的可靠程度,以及它是否適用於所有瀏覽器。 – oscarm 2010-10-10 01:09:41

+0

本應支持WebSockets的瀏覽器(Chrome 5+,Safari 5,Firefox 4 Beta)應該沒有問題,閃回回退將始終是滯後的。 Socket.IO的跌幅更大。即使它們的行爲類似於真正的套接字,但它們實際上並不是,並且有時可能會有些滯後或錯誤。 – 2010-10-10 05:30:08