SocketIO - 如何向特定客户端发送数据
Posted
技术标签:
【中文标题】SocketIO - 如何向特定客户端发送数据【英文标题】:SocketIO - How to send data to a specific client 【发布时间】:2015-09-23 23:13:36 【问题描述】:我在向特定客户端发送数据时遇到问题。
服务器端
var io = require('socket.io').listen(app.listen(app.get('port')));
io.sockets.on('connection', function (socket)
socket.on('onHabboConnection', function (data)
socket.id = data.id;
socket.join(data.id);
io.sockets.in(data.id).emit('onHabboConnected');
);
socket.on('onHabboConnected', function (data)
console.log("<" + socket.id + "> " + data.username + " has joined the game.");
);
);
客户端
var socket = io.connect('http://localhost:3000');
$( document ).ready(function()
socket.emit('onHabboConnection', id:'<%= user.id %>' );
);
socket.on('onHabboConnected', function ()
console.log("WORKING" );
socket.emit('onHabboConnected', username: '<%= user.username %>');
);
io.sockets.in(data.id).emit('onHabboConnected');
我尝试了所有方法,但它们都抛出错误。 这个不会抛出错误但什么都不做!
【问题讨论】:
“我尝试了所有方法,但它们都抛出错误。” 你尝试过 socket.emit 吗?如果是这样,请列出您尝试失败的所有其他“方法”及其错误,以减少猜测。socket.emit()
适用于这种情况。抛出了什么错误?
io.sockets.in(data.id).emit('onHabboConnected');没有发送给客户端。
BUMP,有人请吗?
【参考方案1】:
您正在覆盖在客户端生成的唯一标识符 socket.id
。这就是你发出但它不会去任何地方的原因,因为该客户端不存在:
socket.on('onHabboConnection', function (data)
//socket.id = data.id; remove this
socket.join(data.id);
io.sockets.in(data.id).emit('onHabboConnected');
);
如果您想更改 socket.id
,请在客户端进行更改。
【讨论】:
但是其他用户不能通过客户端更改用户ID吗? socket id 是为客户端生成的唯一会话标识符。为什么你需要改变它? 在这种情况下,从客户端更改它。但是是的,另一个用户可能能够更改它。可能您需要添加一些身份验证,如提到的here 我正在使用,socket.emit 发送到指定的传入客户端。可以吗?以上是关于SocketIO - 如何向特定客户端发送数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥socketio广播向除了发送它的那个客户端之外的所有客户端发送?
使用 Socket IO、Laravel、Redis、Angularjs 向特定用户发送数据