Tôi chỉ có thể phát ra tin nhắn cho người dùng khi id ổ cắm của họ đã được lưu trữ trực tiếp trong hàm io.sockets.on ('connect'). Tôi không biết tại sao nó không hoạt động khi cố gắng lưu trữ id ổ cắm của họ sau khi họ đã đăng nhậpGửi tin nhắn cho khách hàng qua socket.id
làm việc:.
Không làm việc:
var clients = {};
/** A new socket connection has been accepted */
io.sockets.on('connection', function (socket)
{
//Used to access session id
var hs = socket.handshake;
clients[socket.id] = socket; // add the client data to the hash
socket.on('user-login', function(user){
if(!users['brownj2']){
users['brownj2'] = socket.id; // connected user with its socket.id
}
})
socket.on('page-load', function(pid)
{
if(users['brownj2'])
{
clients[users['brownj2']].emit('hello');
}
else
{
console.log("NOT FOUND BROWNJ2");
}
}
}
Đoạn mã JavaScript phía máy khách
var socket = io.connect('');
socket.on("hello", function(){
alert("Hi Jack");
console.log("WEBSOCKET RECIEVED");
})
Giải pháp: Cảm ơn @alessioalex tôi đã phải loại bỏ các tham chiếu đến socket.io từ trang đăng nhập, và thêm đoạn mã sau vào io.sockets.on ('kết nối')
var hs = socket.handshake;
sessionStore.get(hs.sessionID, function(err, session){
console.log("SESSION: " + util.inspect(session));
clients[socket.id] = socket; // add the client data to the hash
validUsers[session.username] = socket.id; // connected user with its socket.id
})
Cảm ơn, nó hoạt động tuy nhiên khi tôi cố gắng sử dụng socket.on ('đăng nhập', .....) {người dùng [u] = socket.id} nó không hoạt động. Tôi chỉ có thể thêm người dùng trực tiếp vào trong io.sockets.on ('kết nối') – Jack
Bạn có chắc chắn không? Vì socket là một biến được định nghĩa là 'ở trên', nên nó cũng sẽ được hiển thị trong hàm đó, giống như tôi hiển thị trong ví dụ của tôi khi ngắt kết nối. – alessioalex
Tôi đã sửa đổi câu hỏi để hiển thị cho bạn một ví dụ hoạt động và không hoạt động. Tôi không thể hiểu tại sao nó sẽ không cho phép tôi gửi tin nhắn trong ví dụ 'không hoạt động' ở trên. – Jack