如果有人对WebSocket/Socket IO有经验,希望你能给我指出正确的方向。
我制作了一个不和谐的克隆,我正试图优化它以更好地扩展。现在,当一个用户发送一条消息时,我向数据库查询该服务器的所有用户部分,并向他们的特定套接字发送一条消息。这显然不能很好地扩展,因为每条消息都需要在客户机列表中进行昂贵的查询和查找
// Emit messages to only users part of specific server
// Will only return list of users part of server and active in last 10 minutes
sqlQuery = `SELECT userservers.user_id FROM userservers
JOIN users ON users.user_id = userservers.user_id AND users.user_last_active > (NOW() - INTERVAL 10 minute)
WHERE server_id = ${sql.escape(serverId)}`;
const users = await sql.query(sqlQuery);
action = { type: "message", payload: msg };
// Iterate over users, and find them in clients list
// Emit over socket only to that user
users.forEach((user) => {
clients.forEach((client) => {
if (client.userId === user.user_id) {
io.to(client.id).emit(user.user_id, action);
}
})
});
然而,为每台服务器使用房间将消除我查询数据库的需要。我知道我可以在套接字服务器首次启动时执行此操作
// Get server list from Mysql DB
servers.forEach((server) => {
socket.join(server.name);
}
但是,我的问题是,当用户在应用程序运行后创建新服务器时,它不会更新列表。
我可能缺少一些关于创建动态房间的概念。
编辑:我想解决方案可能是每次创建“服务器”时,我都会向套接字服务器发送一条消息,这样它就可以加入那个“房间”
现在,当一个用户发送一条消息时,我向数据库查询该服务器的所有用户
我认为您可以向所有在线用户提交广播消息,而不是每个客户端的forEach=
我也想知道你为什么要创建许多服务器?您可以通过使用
const命名空间=io.of('/thisIsADetateNamespace')将服务器划分为命名空间;
并且您还可以通过namespace.emit向此名称空间中的所有用户提交广播消息('某些事件',{for:'名称空间中的每个人' });
所以你的聊天结构可以是这样的
服务器
命名空间//用于单独的聊天应用/或类似于松弛的工作空间
- 房间//小组聊天
- ClientID//为一对一
问题内容: 调用一次后如何重新连接到套接字io ? 这是代码 如果我这样做,它会起作用。如果我这样做,它将断开连接。但是,如果我尝试使用重新连接,则连接不再起作用。我如何才能建立连接? 问题答案: 好吧,您可以在这里选择… 首次初始化套接字值时,应使用, 下次(调用一次断开连接后),您应使用再次连接。 所以你的应该是这样的
我在使用https域和https套接字io时收到此警告。 我的代码是这样的: 希望有答案来解决这个问题。我已经从其他人那里搜索过,但我申请时发现不起作用。
5个脚本(type='text/javascript'6var socket=io.connect();7个socket.on('makeAlert',function(){ Ty感谢你的帮助
问题内容: 如何验证socket.io连接?我的应用程序使用来自另一台服务器(python)的登录端点来获取令牌,每当用户在节点侧打开套接字连接时如何使用该令牌? 和客户端: 如果令牌是在python中创建的: 如何使用此令牌对节点中的套接字连接进行身份验证? 问题答案: 令牌是否在另一台服务器上创建都没有关系。如果您拥有正确的密钥和算法,您仍然可以验证它。 用模块实施 客户 服务器 用模块实施
我尝试用laravel echo服务器和套接字创建实时应用程序。io,但客户端未成为消息 这是我的代码: .环境 配置/queue.php config/database.php 路线/频道。php src/echo。js 活动/MessagePosted.php 消息控制器。php 在Redis cli PING命令return PONG中安装了Redis服务器。我使用php artisan q
我正在Windows Server 2008 R2上运行一个使用IIS 7.5的小网站。我有一个节点。js应用程序也在3000端口上运行。 来自网站(客户端浏览器)的Http调用从至。到目前为止一切正常。 问题是当我尝试使用套接字时。伊奥。 我正在接收: 如果我没有猜错的话,我很肯定: 它确实会将初始请求转发到我的服务器,因为对websocket服务器的初始请求是一个标准HTTP请求(带有一些附加