使用emit

时间:2016-04-04 20:30:04

标签: javascript node.js

我在文件server.js中有一些变量(它们经常更改),当客户端发送请求(发出验证)时,我想将它们传递给client.js。发出事件,但客户端的var obj永远不会更新。如果有人告诉我什么是返回/分配变量的正确方法,我会很感激。

server.js

socket.on('validate', function (obj) {
  console.log("Validate");
  obj.id = 1;
});

client.js

var obj = {id : 0};
socket.emit('validate', [obj]);
console.log(obj.id);

控制台输出:

Validate
0 // Should be 1

2 个答案:

答案 0 :(得分:1)

我认为可能存在对套接字如何工作的误解。在客户端上,您需要收听服务器,就像您在服务器中一样。

一旦服务器上的值发生变化,您需要通过发送另一个事件将其发送到客户端,并提供更新的对象。一旦客户端侦听该事件,它就可以更新自己的该对象实例。

server.js

@Override
public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
    // Get the "data" element from the parsed JSON
    JsonElement data = je.getAsJsonObject().get("data");

    // Deserialize it. You use a new instance of Gson to avoid infinite recursion
    // to this deserializer
    return new Gson().fromJson(data, /* This part not working due to type erasing in java*/ T.calss);
 }
}

client.js

socket.on('validate', function (obj) {
  console.log("Validate");
  obj.id = 1;
  // send the updated obj object because it will go 
  // out of scope at the end of this function
  socket.emit('validate', obj);
});

每当我使用套接字时,我都会把它想象成两个人之间的对话。对话需要两个听众(事件处理程序)和两个说话者(发出呼叫)。

答案 1 :(得分:1)

您需要在server.js中使用socket.emit方法,并在client.js中使用相应的socket.on方法进行通信。

Server.js

socket.on('validate', function (obj) {
  console.log("Validate");
  obj.id = 1;
  socket.emit("validateSuccess", obj);
});

Client.js

var obj = {id : 0};
socket.emit('validate', [obj]);
socket.on("validateSuccess", function(obj) {
  console.log(obj.id);  
});