【问题标题】:socket.io-java-client onMessage() Signaturesocket.io-java-client onMessage() 签名
【发布时间】:2014-04-12 11:00:44
【问题描述】:

我正在使用 socket.io-java-client 库将 Android 应用程序连接到 socket.io/node.js 服务器。 GitHub页面说当收到message事件时可以执行两种方法:

public void onMessage(JSONObject json, IOAcknowledge ack)

public void onMessage(String data, IOAcknowledge ack)

如何控制执行这些方法中的哪一个?我希望第一个(以JSONObject 作为参数)执行,但第二个继续执行。

在我的服务器端,我从使用socket.emit() 切换到socket.send(),试图让第一个onMessage() 执行,但这没有用。我需要在服务器端做些什么来强制第一个 onMessage() 运行吗?

这是我如何从服务器发送消息的示例:

socket.on('sendVerificationCode', function(data) {
    socket.send(JSON.stringify(VerifyObject.sendVerificationCode(), null, 3));
});

【问题讨论】:

    标签: android json node.js websocket socket.io


    【解决方案1】:

    在服务器端执行此操作:

    socket.json.send({property1: 'some value', property2: 'another value'});
    

    现在将执行带有 JSON 参数的 onMessage()

    【讨论】:

    • 我知道我可以手动将对象解析为JSONObject。这个问题的目的是了解为什么socket.io-java-client 首先要执行这个方法。
    • 我认为当您使用 socket.send(string) 时,第二个会执行,因为您将对象字符串化。否则如果你发送 JSON,第一个会执行
    • 我刚刚做了一个测试。当我在服务器端使用JSON.stringify() 时,onMessage(String, IOAcknowledge) 方法会在 Android 设备上执行。当我不在服务器端使用JSON.stringify() 时,on(String, IOAcknowledge, Object) 方法会在 Android 设备上执行。在这两种情况下,我都无法执行 onMessage(JSONObject, IWAcknowledge)
    • 你试过socket.send({property1: 'value 1', property2: 'value 2'});
    • 是的,onMessage(String, IOAcknowledge) 执行。我基本上尝试了socket.emit('message', String)socket.emit('message', Object)、socket.send(String)` 和socket.send(Object) 的所有组合。没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多