gpt4 book ai didi

node.js - 使用 node.js、socket.io 和 redis 的一对一聊天应用程序

转载 作者:IT王子 更新时间:2023-10-29 05:57:31 26 4
gpt4 key购买 nike

我目前在 node.js 和 socket.io 中有一个聊天应用程序(一对一)。随着我网站上的用户越来越多,我想在我的聊天应用程序中引入 redis。这是我当前应用程序的一个小示例:

// all requires and connections
io.sockets.on('connection', function(socket) {

socket.on('message', function(msg) {
// code to get receiverssocket
io.sockets.sockets[receiverssocket].emit('message',
{"source": msg.sendersusername,"msg": msg.msg});

});

});

现在,我正在尝试寻找如何使用 Redis 执行此操作的示例,但我找不到使用 Redis 进行一对一聊天的示例。我只能找到向所有用户发送消息的示例。这是我看过的例子之一

http://garydengblog.wordpress.com/2013/06/28/simple-chat-application-using-redis-socket-io-and-node-js/

我想到的一种方法是为每个接收消息的用户创建 channel ,但这会导致有数千个 channel 。对我如何做到这一点有什么帮助吗?

编辑:添加了一些代码

io.sockets.on('connection', function (client) {

sub.on("message", function (channel, message) {
console.log("message received on server from publish ");
client.send(message);
});
client.on("message", function (msg) {
console.log(msg);
if(msg.type == "chat"){
pub.publish("chatting." + msg.tousername,msg.message);
}
else if(msg.type == "setUsername"){
sub.subscribe("chatting." + msg.user);
sub.subscribe("chatting.all" );
pub.publish("chatting.all","A new user in connected:" + msg.user);
store.sadd("onlineUsers",msg.user);
}
});
client.on('disconnect', function () {
sub.quit();
pub.publish("chatting.all","User is disconnected :" + client.id);
});

});

最佳答案

您必须在专门的用户 channel 上发布。我认为没有其他办法。但别担心,发布/订阅 channel 是不稳定的,所以它应该运作良好。

不要发布到 chatting,而是在 chatting.username 上发布您的消息,然后订阅两者。

io.sockets.on('connection', function (client) {

sub.subscribe("chatting." + client.id);
sub.subscribe("chatting.all" );

sub.on("message", function (channel, message) {
console.log("message received on server from publish ");
client.send(message);
});

client.on("message", function (msg) {
console.log(msg);
// supose that msg have a iduserto that is the distant contact id
if(msg.type == "chat") {
pub.publish("chatting." + msg.iduserto,msg.message);
}
else if(msg.type == "setUsername") {
pub.publish("chatting.all","A new user in connected:" + msg.user);
store.sadd("onlineUsers",msg.user);
}
});

client.on('disconnect', function () {
sub.quit();
pub.publish("chatting.all","User is disconnected :" + client.id);
});
});

关于node.js - 使用 node.js、socket.io 和 redis 的一对一聊天应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com