socket.io - 无法接收" next(new Error())" Android客户端中的事件?

时间:2017-11-19 22:27:38

标签: android node.js sockets socket.io

在我的节点JS后端我对socket.io

进行了一些非常简单的身份验证
io.use(async function (socket, next) {
        try {
            socket.decoded = await db.verifyAuthToken(socket.handshake.query.token, io.secret);
            next();
        }
        catch (err) {
            console.error("Socket error validating JWT: " + err);
            socket.disconnect();
            next(new Error("Socket auth error: No token provided"));
        }
    });

因此,对于我的日志,错误被成功捕获并处理。在我的客户端(Android)中,我有errorconnect_error事件的听众:

mSocket.on("error", new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.e(this.getClass().getName(), Arrays.toString(args));
                }
            });

mSocket.on("connect_error", new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.e(this.getClass().getName(), Arrays.toString(args));
                }
            });

然而,在调试之后,我意识到当我的后端进行next(new Error())调用时,这些事件都不会被调用。这可能有什么问题?我希望我的客户能够成功收到此错误。发送/接收事件时,套接字正常工作。

1 个答案:

答案 0 :(得分:2)

我认为问题在于您在调用socket.disconnect()函数之前调用next()。如果您刚刚断开所有套接字,客户端将如何收到错误事件?

如果你在客户端听"disconnect",我想你会在错误的时候得到一些东西。由于您实际上选择断开连接,因此它不会成为"connect_error"事件。所以我想你必须选择捕获所有断开连接,或者在没有主动断开连接的情况下处理错误。