socket.io java客户端多次获得相同消息

km0tfn4u  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(549)

我正在android聊天应用程序上使用socket.io。为了保持连接的活动性,我正在连接一个在main活动中启动的服务中的套接字。我检查插座是否接通。如果不是,我做插座连接。这是我的密码:

  1. try {
  2. mSocket = IO.socket("http://192.168.x.x:XXXX");
  3. } catch (URISyntaxException e) {
  4. throw new RuntimeException(e);
  5. }
  6. if(!mSocket.connected()){
  7. mSocket.connect();
  8. }
  9. mSocket.on("new message", onNewMessage);
  10. mSocket.on("user joined", onUserJoined);
  11. mSocket.emit("add user", "MobileUser");
  12. message += cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE);
  13. sendMessage();
  14. public void sendMessage(){
  15. mSocket.emit("new message", message);
  16. addMessage("MobileUser", message);
  17. }

连接工作正常。我的服务每分钟都使用套接字发送消息。在另一个客户机中似乎是这样的:

  1. MobileUser: 1:11
  2. MobileUser: 1:12
  3. MobileUser: 1:13
  4. MobileUser: 1:14
  5. MobileUser: 1:15

我的问题是:在这5条消息之后(5次只是一个示例,它可以是大于1的任意数字),如果其他客户机发送消息,我会收到这5条消息。但我当然想得到这一次的信息。我如何处理这个问题?有什么建议吗?
编辑:
我的onnewmessage方法位于客户端:

  1. private Emitter.Listener onNewMessage = new Emitter.Listener() {
  2. public void call(final Object... args) {
  3. Thread t = new Thread(new Runnable() {
  4. public void run() {
  5. JSONObject data = (JSONObject) args[0];
  6. try {
  7. username = data.getString("username");
  8. message = data.getString("message");
  9. } catch (JSONException e) {
  10. return;
  11. }
  12. Log.v(username, message);
  13. }
  14. });
  15. t.start();
  16. }
  17. };

以及我的服务器上的“新建邮件”事件:

  1. socket.on('new message', function (data) {
  2. console.log('message: ' + data);
  3. socket.broadcast.emit('new message', {
  4. username: socket.username,
  5. message: data
  6. });
  7. });
omvjsjqw

omvjsjqw1#

我想我找到了解决办法。我应该检查我的服务类中是否连接了套接字,但这些代码不应该在其中:

  1. mSocket.on("new message", onNewMessage);
  2. mSocket.on("user joined", onUserJoined);
  3. mSocket.emit("add user", "MobileUser");

我从我的服务类中删除了这些,并将其放在mainactivity类中。问题解决了。

相关问题