使用socket io发送和获取数据的两条指令

Posted

技术标签:

【中文标题】使用socket io发送和获取数据的两条指令【英文标题】:Sending and getting data with socket io for two instructions 【发布时间】:2019-02-10 18:00:42 【问题描述】:

我正在尝试找到一种方法,从我的客户端向 JSON 对象内的服务器发出指令。 这是我的问题,我的服务器收到我的第一条指令。但是我的第二条指令“deleteFile”在一个 json 对象中,并且服务器从未收到第二条指令。 我想知道这是否可能,以及我是否以错误的方式进行操作。 我想做这样的事情:

客户:我用我的 var“消息”发出“指令”

service.deleteFile = function (peer, filename, callback)                  
  if (! LoginService.connected || ! LoginService.socket) 
    console.log("deleteFile : not connected to server");
    callback("no server");

  var message = 
    message : 'deleteFile',
    dest_list : _.flattenDeep([peer]),
    filename : filename,
  ;

  LoginService.socket.emit('instruction',(message));
  console.log("service.deleteFile : " , message);
  callback(200);

;

在服务器 app.js 上获取“指令”:

socket.on('instruction', function(jsonMessage)
var dest_list = jsonMessage.dest_list;
var message = jsonMessage.message;
var filename = jsonMessage.filename;

var user_id = dest_list;
var instruction = 
  message : message,
  user_id : user_id,
  filename : filename,
;

if (dest_list.length)
  for (var i = 0; i < dest_list.length; i++) 
    var user_id = dest_list[i].toLowerCase();
    if (user_id in socket_clients)
      var socketId = socket_clients[user_id].socketId;
    socket.broadcast.to(socketId).emit('instruction', instruction);
    console.log(instruction); //print "message:'deleteFile', user_id: ['emitter'], filename: 'thegoodfile'
    
    else
      console.log("Error", user_id);
    
  
 else
    console.log("Error");
 );

然后在服务器 app.js 上执行“deleteFile”(此指令在我从客户端发出的 JSON 对象中):

 socket.on('deleteFile', function(jsonMessage) 
console.log("Test message"); ;

我认为我的服务器不理解我的指令“deleteFile”,但我找不到方法告诉他这是一条指令。 如果我错过了一些信息,请告诉我。 如果你能提供帮助,谢谢。

【问题讨论】:

您显示的代码从不显示.emit('deleteFile', ...),而您正在收听此'deleteFile' 命令以打印"Test message"。如果socket.broadcast.to(socketId) 是一个有效的套接字,我想你应该用.emit(instruction.message, instruction) 替换emit 部分(这样'deleteFile' 的监听器就会被调用)。 你说得对,我认为我的问题出在我的“socket.broadcast.to”上。它也不适用于'.emit('deleteFile',指令)'。所以我会搜索这个套接字有什么问题。谢谢@StockOverflaw 【参考方案1】:

通过这篇文章找到了解决方案:socket, emit event to server from server

我无法通过“广播”从我的服务器发送给他自己。来自 socket.io 文档:

 // sending to all clients except sender
socket.broadcast.emit('broadcast', 'hello friends!');

这是写的..

所以我在 Node 中使用了事件处理程序(文档:https://nodejs.org/api/events.html)并且它有效。

【讨论】:

以上是关于使用socket io发送和获取数据的两条指令的主要内容,如果未能解决你的问题,请参考以下文章

Android 和 Socket.io ,发送和接收数据

获取每个产品最新的两条线并获取价格和日期

html页面通过socket.io获取数据

如何使用 Express、AngularJS、Socket.io 广播和获取通知?

使用 socket.io 更新使用通知

启动Hive的两条指令,和测试hiveserver的一条指令