我试图找到一种从客户端向JSON对象内部的服务器发出指令的方法。 这是我的问题,我的服务器收到了我的第一条指令。但是我的第二条指令“ deleteFile”位于json对象内部,服务器从未收到第二条指令。 我想知道这是否可行,以及我是否使用错误的方式。 我想做这样的事情:
客户端:我用自己的变量“ message”发出“指令”
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',但是我没有找到一种方法来告诉他这是一条指令。 告诉我是否错过了一些信息。 谢谢您的帮助。
答案 0 :(得分:1)
找到了这篇文章的解决方案:socket, emit event to server from server
我无法通过“广播”从服务器发送给自己。从socket.io doc:
// sending to all clients except sender
socket.broadcast.emit('broadcast', 'hello friends!');
它是写的..
因此我在Node(文档:https://nodejs.org/api/events.html)中使用了事件处理程序,并且可以正常工作。