node.js - 来自客户端的 socket.io 广播

标签 node.js socket.io broadcast

我刚开始使用 socket.io,我想要一些功能,可以从一个客户端通过服务器向所有客户端广播一些想法。

比如我会玩游戏,那时我需要处理很多事情。

有两个选项: 1. 服务器端和客户端的每个调用句柄,每个调用都创建 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){
   ....
});

第二种解决方案可以节省很多时间,但它安全吗? 有没有更好的解决方案,如何从客户端广播通过服务器调用其他客户端?

最佳答案

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

您可能希望以某种方式确保您信任发出将导致广播的发射的客户端。 HTTP 协议(protocol)在客户端身份验证方面非常成熟。

Websockets 没有相同的标准方法。也许您应该调查 Websocket 客户端身份验证。没有理由不能对 websockets 使用 JWT 身份验证,只需在客户端发送的数据包中发送 JWT token 即可。这可能是我处理身份验证的方式,但我不是如何使用 websockets 执行此操作的专家。

关于node.js - 来自客户端的 socket.io 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36352558/

相关文章:

node.js - Mongoose验证错误: Invalid schema configuration

node.js - Node 应用程序无法连接到 MongoDB,但仅在 Docker 中

node.js - 在node.js中使用socket.io共享用于协作工作的url

video - Node.js异步视频转换速度慢

javascript - 尝试在 angular2 中使用 stomp.js

javascript - 从服务器(Expressjs路由)发送消息到客户端

jquery - socket.io - 引用错误 : socket is not defined

apache-spark - spark广播变量的大小有限制吗?

synchronization - NTP 往返延迟

apache-spark - MapWithState 给出 java.lang.ClassCastException : org. apache.spark.util.SerializableConfiguration cannot be cast while recovering from checkpoint