客户端的socket.io广播

5
我刚开始接触socket.io,我想要一些函数,能够将一个客户端发送的信息通过服务器广播给所有客户端。
例如,当我需要处理很多事情的游戏时。
有两个选项: 1. 每次调用都在服务器和客户端上处理,为每个调用创建socket.on('call');
但我认为还有更好的解决方案 2. 在客户端调用时,当我得到负载和将从服务器调用其他客户端的套接字名称时发出。
就像这样: SERVER
// 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个回答

4

只有服务器可以向所有客户端广播。服务器保留控制权。 你的第二个解决方案是最好的解决方案。

你可能希望以某种方式确保你信任正在发出广播的客户端。HTTP协议在客户端身份验证方面已经得到了很好的应用。

Websockets没有相同的标准方法。也许你应该研究一下Websocket客户端身份验证。没有理由不使用JWT身份验证与Websockets,只需将JWT令牌发送到客户端发送的数据包中即可。这可能是我处理身份验证的方式,但我不是关于如何在Websockets中实现此功能的专家。


谢谢您的回复。那么,如果我使用某些身份验证来检查套接字IDS,这个解决方案会安全吗? - Hadik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接