套接字.发送用户和消息数据

Socket.io - sending both user and message data

本文关键字:消息 数据 用户 套接字      更新时间:2023-09-26

我一直在关注Socket的入门页面。并且已经完成了主要任务。但是,现在我正在尝试实现一个新功能,以便它将用户的名称与消息一起发送回来。虽然这发送回消息很好,我不确定如何实现它,所以它也发送回用户的数据。我知道我可以复制下面的代码并将其编辑为用户特定的东西,但是接下来呢?

发出正常用户:

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));
  });

正如Jonathan所评论的那样,只需将其作为对象发送即可。

注意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'} });

我不完全确定我是否正确理解了你的问题,但我认为你所需要做的就是发出一个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));
  });