2015-10-16 52 views
1

我正在尋找一個Node.js模塊(或一個建議/想法),以便我的服務器可以創建/處理特定客戶端之間的雙向通信用於2個客戶端之間進行通信的Node.js模塊?

換句話說,我希望能夠傳輸數據來自客戶端X到客戶端Y,反之亦然。

我正在調查socket.io,但它似乎是一個傳統的Web套接字服務器,它接收來自所有客戶端的消息,然後將相同的消息發送給所有客戶端。我可能是錯的,因爲我在這個領域沒有經驗。

就我而言,我確實希望我的服務器能夠接收來自不同客戶端的消息,但我希望服務器將這些消息轉發給特定的客戶端。

例如

  • 向前MSG從客戶端X來的客戶端僅Y(反之亦然)
  • 向前MSG從客戶端A來客戶端B僅(反之亦然)

我沒有使用網絡套接字的經驗(我甚至不確定網絡套接字是否是我正在尋找的),但是我對基本Node.js服務器有經驗。

感謝您的幫助!

+0

讓我知道如果您有任何後續問題,如果我的代碼被破壞。 – Jason

+0

我會做傑森,我還沒有時間檢查它,但我會盡快發表評論,只要我實施您的解決方案,謝謝,但它看起來像我正在尋找..! –

回答

1

在Node.js WebSocket服務器中,由於您正在對服務器進行編碼,因此您可以完全控制誰獲得了什麼消息。你可以做這樣的事情...

當客戶端與服務器建立WebSocket連接並將其連接對象存儲在一個數組中時,可以將其連接的索引視爲其ID。如果你願意,你可以把這個ID(和他們的IP地址)廣播給那個地方的所有其他客戶,讓他們知道誰已經連接。然後,當客戶想要發送消息到另一個客戶端或客戶端時,讓客戶端進行消息傳遞包括目標客戶端和消息。這裏是服務器的相關部分:

var client_list = []; 

ws_server.on('request', function(request) { 
    var connection = request.accept(null, request.origin); 

    //let all other clients know that a new client has arrived 
    //send the new client's ID and IP address 
    for(var i = 0; i < client_list.length; i++) { 
    client_list[i].send(JSON.stringify({ 
     type: "new client", 
     data: { 
     ID: client_list.length, 
     IP: connection.remoteAddress 
     } 
    })); 
    } 

    //store the new connection 
    client_list.push(connection); 

    //let the new client know what their ID is 
    connection.send(JSON.stringify({ 
    type: "assignment", 
    data: { 
     ID: client_list.length - 1 
    } 
    })); 

    //when you receive a message from a client of type "relay", 
    //send it to the intended targets 
    connection.on("message", function(message) { 
    var parsed_message = JSON.parse(message.utf8Data); 
    if(parsed_message.type === "relay") { 
     for(var i = 0; i < parsed_message.targets.length; i++) { 
     client_list[parsed_message.targets[i]].send(parsed_message.data); 
     } 
    } 
    }); 
}); 

從客戶端傳出的消息是這樣的:

{ 
    type: "relay", 
    targets: [1, 33, 7], 
    data: { 
    content: "Hey guy!", 
    origin: my_id 
    } 
} 

我沒有測試,所以讓我知道,如果它給你帶來麻煩。

+0

據我所知,我對Node.js比較陌生,並且在生產中擴展Node.js是全新的,但可能必須具有多個Node.js服務器實例。你如何處理跨這些服務器實例共享開放式網絡套接字?也許我應該把它推入自己的SO問題中......另請參見「生產應用程序和運行多個單一網絡動態代碼的應用程序,需要一個體繫結構來說明動態鏈接之間的共享狀態」(https://devcenter.heroku。 COM /用品/節點的WebSockets)。 –

1

我也是NodeJs的新手。簡要回答你的問題

Socket.io是前進的道路。您可以通過在不同端口上連接它們來隔離您的客戶端通信。

客戶機X客戶端僅Y - 端口1234

客戶端A只有客戶端B - 端口1256

問候

1

Socket.io將幫助您設置的WebSockets在多個客戶端和服務器之間,以便您可以在連接的實例之間實時同步數據。這是一個客戶端 - 服務器通信

我想你想要的是一個WebRTC庫,如PeerJS。這個人特別設置了一個握手服務器使用Node.js橋接兩個客戶端之間的連接,並讓他們自己從這一點進行通信,只要websocket持續(即:刷新將斷開連接)。這個庫可以幫助您實現客戶端客戶端實時通信。

This Stack Overflow thread可以幫助您進一步使用更長的WebRTC庫列表。

+1

我想這取決於OP要發送多少數據。 – Jason

相關問題