我在文件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
答案 0 :(得分:1)
我认为可能存在对套接字如何工作的误解。在客户端上,您需要收听服务器,就像您在服务器中一样。
一旦服务器上的值发生变化,您需要通过发送另一个事件将其发送到客户端,并提供更新的对象。一旦客户端侦听该事件,它就可以更新自己的该对象实例。
@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);
}
}
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);
});