2016-04-01 194 views
2

我剛剛開始使用socket.io,並且我希望有一些函數能夠從客戶端通過服務器向所有客戶端廣播某些思想。來自客戶端的socket.io廣播

例如,我會有遊戲,當我需要處理很多事情。

有兩個選項: 1. 服務器端和客戶端的每個調用句柄,對於每個調用create socket.on('call');

但我認爲有更好的解決方案 2. 當客戶端調用發出時,我得到的有效載荷和套接字名稱將從服務器調用到其他客戶端。

像這樣: 服務器

// Broadcast specific emit to all clisnts expect sender 
socket.on('broadcast', function(data){ 
    socket.broadcast.emit(data.emitName, {id: socket.id, payload: data.payload}); 
}); 

和客戶端:

// Call to server 
socket.emit('broadcast', {emitName: 'playerMove', payload: {....}}); 

// Handle called from server 
socket.on('playerMove', function(data){ 
    .... 
}); 

第二解決方案可以節省大量的時間,但它是安全的解決方案? 有沒有更好的解決方案如何從客戶端廣播通過服務器和呼叫到其他客戶端?

回答

1

只有服務器可以廣播給所有客戶端。服務器保留控制權。 你的第二個解決方案是最好的解決方案。

您可能希望以某種方式確保您信任導致廣播發出的客戶端。 HTTP協議在客戶端認證方面已經很成熟。

Websockets沒有相同的標準方法。也許你應該調查Websocket客戶端認證。沒有理由不能使用Websocket的JWT身份驗證,只需在客戶端發送的數據包中發送JWT令牌即可。這可能是我如何處理身份驗證,但我不是如何使用websockets完成此任務的專家。

+0

感謝您的回覆,所以當我使用一些身份驗證檢查套接字IDS然後將這個解決方案安全嗎? – Hadik