【问题标题】:Getting loop with Socket.Io Listeners使用 Socket.Io 监听器获取循环
【发布时间】:2017-11-03 12:18:39
【问题描述】:

我有一个使用 NodeJS、Socket.IO 和 Express 开发的服务器。我开发了一个网站来处理该服务器并且工作正常。当我尝试开发一个 android 应用程序时,问题就来了。

我在 socket.io 上有一个方法,它返回一个对象数组。在代码中是这样的:

socket.on("getData",function(data){
 if(data!=null){
 io.sockets.connected.emit("getSocData", {result:true});
}
}

在客户端,在js中,哪里工作正常。

socket.on("getSocData", function (data) {
 if(data){alert("good"); }
}

当我调试Android应用时,问题来了,代码在哪里:

mSocket.on("getSocData", new Emitter.Listener() {
    @Override
    public void call(final Object.. args) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
            }
        });
    }
});

当我用我的手机调试那个 Android 代码时,开始循环 run 方法超过 20 次,尽管 mSocket.on 只触发了一次。

我快疯了,因为在网站中运行良好,但在 Android 中冻结了应用程序,直到运行方法停止。

我使用的依赖是:

compile ('io.socket:socket.io-client:0.8.3') {
    exclude group: 'org.json', module: 'json'
}

谢谢 4 伙计们!

【问题讨论】:

    标签: javascript android node.js sockets socket.io


    【解决方案1】:

    在为您的套接字调用 off() 方法设置事件侦听器之前,以便清除所有附加事件:

    mSocket.off()
    mSocket.on("getSocData", new Emitter.Listener() {
        @Override
        public void call(final Object.. args) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    JSONObject data = (JSONObject) args[0];
                }
            });
        }
    });
    

    【讨论】:

    • 像魅力一样工作!我认为 android 和网站中的客户端工作方式相似。
    猜你喜欢
    • 2016-08-29
    • 2013-11-29
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多