Я использую socket.io на моем приложении для андроид-чата. Чтобы поддерживать связь, я подключаю сокет к сервису, который запускается в основном режиме. И я проверяю, подключен ли сокет. Если это не так, я делаю сокет. Вот мои коды:Socket.io java клиент получает одно и то же сообщение более одного раза
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);
}
Соединения прекрасно работают. Моя служба отправляет сообщение через сокет каждую минуту. Это кажется, что это в другом клиенте:
MobileUser: 1:11
MobileUser: 1:12
MobileUser: 1:13
MobileUser: 1:14
MobileUser: 1:15
Вот моя проблема: После этих 5 сообщений (5 раз это всего лишь пример, это может быть любое число больше 1), если другой клиент посылает сообщение, я получаю это сообщение 5 раз. Но, конечно, я хочу получить это сообщение на этот раз. Как я могу справиться с этой проблемой? Какие-либо предложения?
Edit:
Мой 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
});
});
Что вы делаете в методе onNewMessage? Кажется, что вы слушаете и отправляете событие «нового сообщения» на своем сервере, что может быть проблемой – risuch
Да, вы правы. Я собираюсь изменить свой вопрос, добавив метод onNewMessage. @risuch – zeynepsam
Пока ничего не выглядит ошибочным, но его не совсем понятно, что все части задействованы в вашем приложении клиент-сервер, поэтому его сложно разработать. Возможно, вы захотите загрузить какой-либо плункер или чтобы отображалась полная информация. Также кажется, что ваш сервер - node.js и Client Java, правильно? И все клиенты используют один и тот же код и подключаются к одному и тому же серверу? – risuch