【问题标题】:Socket.io - sending both user and message dataSocket.io - 发送用户和消息数据
【发布时间】:2015-09-29 23:59:36
【问题描述】:

我一直在关注 Socket.io 上的入门页面并完成了主要任务。但是,现在我正在尝试实现一项新功能,以便将用户的姓名与消息一起发送回。虽然这可以很好地发回消息,但我不确定如何实现它,因此它也会为用户发回数据。我知道我可以复制下面的代码并将其编辑为特定于用户的内容,但是接下来呢?

正常发射用户:

socket.emit('chat message', $('#u').val());

然后,在服务器上检索它:

  socket.on('chat message', function(msg){
      io.emit('chat message', msg);
  });

然后,在页面上显示该信息:

socket.on('chat message', function(msg){
    $('#messages').append($('<li class="mesg">').text(msg));
  });

【问题讨论】:

  • 将它作为 JSON 对象发送然后解析它,也许?

标签: javascript node.js socket.io


【解决方案1】:

正如乔纳森所说,只需将其作为对象发送即可。

请注意,socketio 会自动为您序列化/反序列化,因此您不需要额外的 JSON.stringify 步骤。

这是我现在正在使用的游戏代码中的一个示例:

//client.js
io.emit('waypoint', { x: players.me.targetX, y: players.me.targetY });

//server.js
socket.on('waypoint', function (msg) {
   console.log(msg.x, msg.y);
});

所以在你的情况下,像这样,

//client.js
    io.emit('chat message', { msg: $('#u').val(),
                              userColor: 'green',
                              moreData:{ isAwesome:true, favoritePie:'apple'} });

【讨论】:

    【解决方案2】:

    我不完全确定我是否正确理解了您的问题,但我认为您需要做的就是发出一个 JSON 对象作为您的消息,然后解析另一端的响应,如下所示:

    var obj = {message: $('#u').val(), user: "User"};
    socket.emit('chat message', JSON.stringify(obj));
    
    socket.on('chat message', function(msg){
          io.emit('chat message', msg);
      });
    
    socket.on('chat message', function(msg){
        var message = JSON.parse(msg).message; //$('#u').val()
        var user = JSON.parse(msg).user;       //"User"
        $('#messages').append($('<li class="mesg">').text(message));
      });
    

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 2021-04-10
      • 2015-01-16
      • 1970-01-01
      • 2020-09-10
      • 2018-01-14
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      相关资源
      最近更新 更多