【问题标题】:SocketIO - How to send data to a specific clientSocketIO - 如何向特定客户端发送数据
【发布时间】: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,有人请吗?

标签: node.js socket.io


【解决方案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 发送到指定的传入客户端。可以吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
相关资源
最近更新 更多