Socket.io:如何让每个人都获得不同的渠道?

时间:2017-02-02 20:19:19

标签: javascript node.js sockets socket.io server-side

我目前正在开发一个小网站,我想让每个人都听一个不同的频道,因为它就像一个搜索服务器端然后回复客户端的网站。 我想到的唯一想法是这样的:

客户端:

var randomnum = Math.floor((Math.random() * 100) + 1);
socket.emit('getnumber', randomnum);
// Then listen to that channel for incoming stuff
socket.on(randomnum, function(msg){
[...]

服务器端:

socket.on('randomnum', function(randomnumget){
// Do things with it then
[...]
socket.emit('getnumber', 'stuff');
});

但是这样做超过4会很难,我确信还有另一种简单的方法!谢谢你

1 个答案:

答案 0 :(得分:0)

这是我可能的实现想法/流程。目前,我们不知道您的应用程序需要处理哪些负载,因此可能需要改进最终实现。

我假设您使用某种ID识别您的用户,将其存储在cookie或localstorage中。

首先,当用户访问您的站点时,它会请求套接字通道连接(例如GET / channel)。在服务器端,您实现了为每个用户提供唯一ID的查询,它可以是UUID或其他一些基于时间的ID。为了确保用户不会获得完全相同的ID,您可以在Redis或其他数据库中存储ID。

此外,您可以使用Redis键EXPIRE在10分钟后从DB中删除密钥。

使用您示例中的随机数字并不是最佳选择,因为它很快就会发生碰撞。例如,要获得更好的唯一渠道名称,您可以:sha256(Date.now() + Math.random())