直截了当:我正在使用node.js,socket.io和Redis进行私人聊天系统。
在连接时,用户将其网站ID(userID)传递给node.js服务器。他可能有多个连接,所以我必须以某种方式将(每个连接的)socketID和userID配对。我在考虑使用redis存储userID->
sessionID对。但是,当用户断开连接时,我需要从redis中删除该对。但是我只有socketID而没有userID,因此无法通过该键进行选择。
现在,我是用错误的方式来处理还是应该同时存储userID-> socketID和socketID-> userID对?也许有人可以提供更优雅的解决方案?
一个更优雅的解决方案是使每个套接字都连接到通道userID,例如:
io.sockets.on('connection', function (socket) {
socket.join(userID);
});
// when you want somebody to send a message to userID you can do:
io.sockets.in(userID).emit(message);
这里需要注意两点:
当其他用户想要向userID发送消息时,他们不需要连接到userID通道,则可以向该chat
通道发送消息并将userID作为属性传递。例如:
var chat = io
.of('/chat')
.on('connection', function (socket) {
// connected to public chat
})
.on('message', function (data) {
if (data.userID && data.message) {
io.sockets.in(userID).emit('UserX: ' + data.message);
}
});
问题内容: TLDR;如何在基于事件的编程模型中标识套接字。 我刚刚开始使用node.js,过去我在C ++和PHP sockets()中完成了大部分编码工作,所以node.js对我来说是非常新的东西。 在c ++中,我们可以通过编写主套接字(例如服务器)来侦听新的连接和更改,然后相应地处理这些连接,从而完成识别套接字的工作。 问题答案: 如果您在寻找实际的套接字而不是socket.io,那么它们
终止TCP/IP连接的最佳方法是什么,该连接清理了系统上的开放套接字,但让远程方挂起。那就是我想要关闭一个插座的方式,对我来说是最低的成本,但对他们来说是最高的成本。 @尼古拉斯·威尔逊: 使用tcprepair似乎是个好主意。当套接字在TCP_REPAIR模式下关闭时,不会发送FIN或RST数据包。远程插座挂起。我要去试试看然后回去报告。下面是我的(未经测试的)代码: 只是不要关闭它。打开的插座
我有一个Android应用程序,需要允许多个套接字通信。以下是相关的基本工作: 我的应用程序(说服务器)是一个将作为服务器套接字运行的服务。其他应用程序可以在预定义的端口上连接到它。可以有多个连接,例如客户端1、客户端2。 所以,当客户端1发送hello时,服务器将对此进行处理,并应将回复发送回客户端1。 目前我能够连接客户端1和客户端2的服务器。我已经为其创建了输入、输出缓冲区。但我不确定服务器
我设法创建了基本的远程管理员工具,它运行良好,我使用了基本的tcp套接字和C++中的多线程。我可以用一些功能来远程使用它,这就像90%完成了,但我的软件没有任何东西可以检测客户端断开,除了当客户端手动关闭时,客户端会发送断开消息给服务器,但当用户拔掉网络插头或其他东西时,断开发生时,什么是最好的处理方法,我正在寻找一种专业的方法来做,比如如果客户端断开,服务器会立即检测到哪个客户端断开。
问题内容: 由于共享主机,我的目标主机上的redis服务器不是在端口上运行,而是在非常特定的套接字上运行,该套接字可以通过套接字文件连接,只有我的用户可以访问。 但是,我还没有找到如何在and 包(我想使用的包)中通过套接字指定连接的方法。 有人知道怎么做吗? 问题答案: 更新: 我下面的回答不是真的正确。事实证明,我下面提到的问题中的解决方案实际上仍然有效。IMO,这更多是巧合,但是您可以执行以
套接字接口 结构体 struct fd_set 文件句柄管理 更多... 类型定义 typedef struct fd_set fd_set 文件句柄管理 函数 int socket (int domain, int type, int protocol) 创建套接字 int bind (int s, const struct sockaddr *name, so