我在我的Android聊天应用程序中使用 socket.io 。为了保持连接活动,我在主活动中启动的服务中连接套接字。我检查插座是否已连接。如果不是,我进行套接字连接。这是我的代码:
try {
mSocket = IO.socket("http://192.168.x.x:XXXX");
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
if(!mSocket.connected()){
mSocket.connect();
}
mSocket.on("new message", onNewMessage);
mSocket.on("user joined", onUserJoined);
mSocket.emit("add user", "MobileUser");
message += cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE);
sendMessage();
public void sendMessage(){
mSocket.emit("new message", message);
addMessage("MobileUser", message);
}
连接完美无缺。我的服务每分钟都使用socket发送消息。这似乎在另一个客户端:
MobileUser: 1:11
MobileUser: 1:12
MobileUser: 1:13
MobileUser: 1:14
MobileUser: 1:15
这是我的问题:在这5条消息之后(5次只是一个例子,它可能是超过1的任何数字),如果其他客户端发送消息,我收到5条消息倍。但是我当然希望得到这个消息一次。我该如何处理这个问题?有什么建议吗?
修改
我的onNewMessage方法在客户端:
private Emitter.Listener onNewMessage = new Emitter.Listener() {
public void call(final Object... args) {
Thread t = new Thread(new Runnable() {
public void run() {
JSONObject data = (JSONObject) args[0];
try {
username = data.getString("username");
message = data.getString("message");
} catch (JSONException e) {
return;
}
Log.v(username, message);
}
});
t.start();
}
};
"新消息"我服务器上的活动:
socket.on('new message', function (data) {
console.log('message: ' + data);
socket.broadcast.emit('new message', {
username: socket.username,
message: data
});
});
答案 0 :(得分:0)
我想我找到了解决方案。我应检查套接字是否已连接到我的服务类中,但这些代码不应该在那里:
mSocket.on("new message", onNewMessage);
mSocket.on("user joined", onUserJoined);
mSocket.emit("add user", "MobileUser");
我从服务类中删除了这些并放入了MainActivity类。问题解决了。