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

标签 android node.js sockets socket.io

在我的 node 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()) 调用时,这些事件都没有被调用。这里有什么问题?我希望我的客户能够成功收到此错误。套接字在发出/接收事件时正常工作。

最佳答案

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

如果您在客户端中监听 "disconnect",我想您会在它出错时得到一些信息。因为您实际上选择断开连接,所以它不会是 "connect_error" 事件。所以我想您将不得不选择捕获所有断开连接,或者在不主动断开连接的情况下处理错误。

关于android - socket.io - 无法在 Android 客户端中接收 "next(new Error())"事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382682/

相关文章:

java - 在创建时将对象传递给滑动选项卡 fragment

android - 在特定点击次数后显示插页式广告

node.js - Jest 无法处理sequelize.sync() promise

html - 从 Express/node.js Web 应用程序预填充 HTML/Jade

c++ - QTcpSocket 不加载 ssl

Python 原始 udp 数据包未到达 udp 监听器

android - 通过 VirtualBox Telnet 连接到 Android-x86

android - 如何更改Android Studio中的编译版本?

node.js - 无法在 Typescript 中使用 Bluebird promisifyAll Redis api

ruby - ZeroMQ 安全地通过互联网