gpt4 book ai didi

node.js - 使用 Socket.io 向一个用户发送消息

转载 作者:IT王子 更新时间:2023-10-29 06:10:56 25 4
gpt4 key购买 nike

我正在寻找一种使用 Node.js、socket.io、Redis 将消息发送到一个特定客户端的方法。 (这也意味着跟踪该用户)

请帮忙

var app = require('express')();

var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
var user=[];

server.listen(3000);
io.on('connection', function (socket) {

var redisClient = redis.createClient();
redisClient.subscribe('message');

user[socket.handshake.query.userid] = socket;

socket.on('create', function(id) {
user[id] = socket;
});


redisClient.on("message", function(channel, message) {
var message=JSON.parse(message);
var id=JSON.parse(message.id);
var target=id;

console.log("target id => "+user[target].id+" / socket.id => "+socket.id)

try{
if(user[target].id==socket.id){
user[target].emit(channel,message.msg);
}else{
console.log('when socket.id dont match')
}
}catch (e){
console.log(e);
}
console.log("\n#########################\n");

});



});

最佳答案

您确实需要存储传入连接。
客户:

var userid = '69b6';//anything you like
var con = io.connect('localhost:4545/', { query: `userid=${userid}` });

服务器:

var users = {} ;
io.on('connection', function(client){
users[client.handshake.query.userid] = client;
});

//you want to send something to a user
users[userid].emit('yolo', data);

编辑:我稍微修改了你的代码

var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
var users = {};

server.listen(3000);

var redisClient = redis.createClient();

io.on('connection', function (socket) {
var userId = socket.handshake.query.userid;
users[userId] = socket;
});

redisClient.subscribe('message');
redisClient.on("message", function(channel, message) {
var message = JSON.parse(message);
var userId = message.id;
var userSocket = users[userId] || null;

console.log('=======[Message received]=======');
console.log('UserId:', userId);
console.log('SocketId:', userSocket.id);

if(userSocket){
userSocket.emit(channel, message.msg);
console.log("Message was succefully sent!");
}else{
console.log('User socket unavailable');
}
});

告诉我它是否有效,以及您是否难以理解我所做的更改。

关于node.js - 使用 Socket.io 向一个用户发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538202/

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