套接字发射失败
Socket emit fails
socket.on('sign_in', function(idA, idB) {
var idA = idA; //global vars
var idB = idB; //ignore this var
if (!clients[idA]) {
clients[idA] = socket.id;
}
console.log(idA + ' has connected');
io.to(clients[idA]).emit('sign_in', idA + ' has connected'); });
io.emit('sign_in', "user is signed in");
我正在尝试将消息“'idA' 已连接”发送到我的 android 客户端。问题是发送到特定客户端只能工作一次。一旦服务器停止发送“'idA' 已连接”这一行,它就会被调用。我必须重置我的服务器才能让它再次工作,但问题仍然存在。基本的 io emit 函数一直有效,这让我认为它是特定客户端发出的问题。
我已经尝试将选项 'forceNew' 添加到我的套接字连接,但它没有改变任何东西(我正在使用 nkzawa 套接字客户端)。
我的客户代码:
IO.Options options = new IO.Options();
options.forceNew = true;
socket = IO.socket(HOST, options);
然后使用新线程:
new Thread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "attempting to connect socket");
socket.connect();
idA = "user1"
idB = "nicknameOfUser1"
socket.emit("sign_in", idA, idB);
}
}).start();
接收发射:
socket.on("sign_in", new Emitter.Listener() {
@Override
public void call(Object... args) {
String message = (String) args[0];
System.out.println(message);
}
});
同样,消息“'idA' 已连接”只会在第一次打印出来。但是消息 "user has signed in" 每次都被一致地调用。
原来是我的emit写错了
io.to(clients[idA]).emit('sign_in', idA + ' has connected');
应该是
clients[idA].emit('sign_in', idA + ' has connected');
也一定要赋值
clients[idA] = socket;
socket.on('sign_in', function(idA, idB) {
var idA = idA; //global vars
var idB = idB; //ignore this var
if (!clients[idA]) {
clients[idA] = socket.id;
}
console.log(idA + ' has connected');
io.to(clients[idA]).emit('sign_in', idA + ' has connected'); });
io.emit('sign_in', "user is signed in");
我正在尝试将消息“'idA' 已连接”发送到我的 android 客户端。问题是发送到特定客户端只能工作一次。一旦服务器停止发送“'idA' 已连接”这一行,它就会被调用。我必须重置我的服务器才能让它再次工作,但问题仍然存在。基本的 io emit 函数一直有效,这让我认为它是特定客户端发出的问题。 我已经尝试将选项 'forceNew' 添加到我的套接字连接,但它没有改变任何东西(我正在使用 nkzawa 套接字客户端)。
我的客户代码:
IO.Options options = new IO.Options();
options.forceNew = true;
socket = IO.socket(HOST, options);
然后使用新线程:
new Thread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "attempting to connect socket");
socket.connect();
idA = "user1"
idB = "nicknameOfUser1"
socket.emit("sign_in", idA, idB);
}
}).start();
接收发射:
socket.on("sign_in", new Emitter.Listener() {
@Override
public void call(Object... args) {
String message = (String) args[0];
System.out.println(message);
}
});
同样,消息“'idA' 已连接”只会在第一次打印出来。但是消息 "user has signed in" 每次都被一致地调用。
原来是我的emit写错了
io.to(clients[idA]).emit('sign_in', idA + ' has connected');
应该是
clients[idA].emit('sign_in', idA + ' has connected');
也一定要赋值
clients[idA] = socket;