跨多个服务器存储用户的socket.id的最佳方式是什么?以一个简单的聊天应用程序为例,如果不同服务器上的两个用户正在相互发送消息,则两个服务器必须在某个地方存储每个用户的套接字ID,以便它们可以将消息从一个用户发送到另一个用户。目前我正在使用redis哈希来存储每个用户的套接字ID(如果他们在线),但如果用户有两个连接(例如,他们打开了聊天应用程序的两个选项卡),这将不起作用。继续使用redis的最佳方法是重组数据结构以使其在用户连接两次时工作,还是转移到mongodb或mysql之类的东西更好?我还想要一种使数据过期的方法,例如,如果套接字ID存储超过24小时,那么它应该被自动删除
我的理解是socket.io使用redissocket.set('var',val1);varval2=socket.get('var');但是redis不在node_modulessocket.io是否使用它自己的redis私有(private)实例?如果没有,是否可以通过redis客户端访问存储在redis中的socket.io值? 最佳答案 Socket.io使用Redis来存储有关套接字的信息。如果同一个应用程序有多个socket.io服务器,则需要使用它。显然,如果您不覆盖socket.io的数据,您可以将此redis用于
我用node.js、socket.io、集群、redis制作了一个应用程序,它在8个进程中运行。是否有可能每个进程都有一些幽灵套接字?我的意思是已经断开连接但不是每个进程都知道它并且仍然有它们的套接字。我的应用在连接事件中向客户端发送在线计数(来自两个房间的socket计数)。名为“HEAD”的进程每3秒向所有套接字“在线计数”发送一次。我为什么要告诉它?当我在浏览器中连接到应用程序时,首先从8个进程之一获取“在线计数”,设为60,然后3秒后,我从HEAD进程获取“在线计数”,但它是非常不同的数字。所以我认为有些事情不会通过Redis同步到进程。可能吗? 最
我正在使用redis、tornadio2和socket.io构建一个实时应用程序。它在我的本地机器上运行良好,但在投入生产之前,我想做一些压力测试。这样我就可以知道一个tornadio2websocket连接实例可以处理多少个客户端。我在Google上搜索过,但没有找到任何现成的工具来测试它。我应该自己编写这个脚本,还是我错过了什么,是否有用于此目的的工具?谢谢! 最佳答案 您可以使用我用来测试node.jssocket.io服务器(和SockJS服务器)的基准测试工具。TornadIO2将比sockjs-tornado慢15-20
我正在使用Nodejs和Socket.io开发一个复杂的游戏,我需要在内存中存储socket.io对象,并将属性分配给套接字对象(比如说一个名称,一个来自套接字的某些操作的计数器等)在下面的代码中,我展示了我想要实现的目标的示例。我将所有套接字存储在一个数组中,还有另一个数组存储套接字的名称属性。任何时候如果我收到名称请求,我都可以从内存中的数组中选择名称。但现在我的用户太多了,我需要在多台服务器上平衡我的应用程序。所以我不能在内存中存储对象和属性。我需要将它们存储在数据库中。我打算使用Redis。此链接说明如何将RedisStore用于套接字-https://github.com/L
我正在编写一个应用程序,用户可以同时从多个浏览器登录,并在页面加载时与服务器上的socket.io建立连接。我想跟踪所有客户端套接字ID,socket.id,在一个redis集中,其键看起来像userId:???:socketClientIds登录用户。我要SADD通过ajax调用php脚本后设置为redis的套接字客户端ID。由于我将用户ID保存在phpsession变量$_SESSION['userId']中,我可以将此用户ID的值传递给socket.io的安全/实用方法是什么我可以将客户端ID添加到集合中吗?client.sadd("userId:???:socketClient
我是docker的新手。当我运行dockerpullsonarqube时,出现以下错误。来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:调用TCP:在192.168.65.1:53上查找registry-1.docker.io:没有这样的主机能否请您告诉我为什么会出现此错误以及如何纠正此问题。 最佳答案 我在Ubuntu16.04上遇到过类似问题并设法通过添加更多nameservers来解决它你也可以试试。打开配置文件sudonano/etc/resolv.conf并在现有名称服务器下添
我是docker的新手。当我运行dockerpullsonarqube时,出现以下错误。来自守护程序的错误响应:获取https://registry-1.docker.io/v2/:调用TCP:在192.168.65.1:53上查找registry-1.docker.io:没有这样的主机能否请您告诉我为什么会出现此错误以及如何纠正此问题。 最佳答案 我在Ubuntu16.04上遇到过类似问题并设法通过添加更多nameservers来解决它你也可以试试。打开配置文件sudonano/etc/resolv.conf并在现有名称服务器下添
我正在尝试在我的应用程序中进行聊天,但我遇到了一个不知道如何解决的问题!这是塞纳里奥:我们有很多经过身份验证的用户,所以他们都有一个唯一的ID,我想实现像Facebook这样的聊天,这样每两个用户就可以互相聊天。为此,我有一个包含内容的server.js文件:varapp=require('express')();varserver=require('http').Server(app);vario=require('socket.io')(server);varredis=require('redis');varusers=[];server.listen(8890);io.on('
我正在开发一个使用php+socket.io的私有(private)消息系统的网站。从一开始我就使用socket.emit将sender_id、recipient_id和text传递给socket.io但后来意识到这很容易被篡改,并想以某种方式使用我的phpsession来确保sender_id确实是sender_id。我现在有以下设置,但我真的不明白如何将session从index.php传递到app.js,然后连接到app.js中的redis-server以获取包含user_id的PHPSESSID。服务器1运行nginx+php-fpm(index.php)服务器2使用socke