为啥没有调用android端的socket.io监听器?

Posted

技术标签:

【中文标题】为啥没有调用android端的socket.io监听器?【英文标题】:Why socket.io listener in android side not called?为什么没有调用android端的socket.io监听器? 【发布时间】:2021-03-07 06:18:44 【问题描述】:

我为用户身份验证编写套接字中间件,但我不知道我的问题是什么! 在 android"unauthorized" 事件未调用。

服务器端:

async function (socket, next) 

    
    if (socket.handshake.query && socket.handshake.query.token) 
        jwt.verify(socket.handshake.query.token, process.env.SECRET_JWT_KEY, function (err, decoded) 

            if (err) 
                socket.emit( "unauthorized",  "unauthorized user") <==send to sender you'r authentication is failed 
                console.log("Query: ", "unauthorized");    <==This line is lunched
                return next(new Error('Authentication error'));
            
            socket.decoded = decoded;
            next();
        );
     else 
        next(new Error('Authentication error'));
    

客户端:

   val socket = IO.socket("http://192.168.1.6:3000", IO.Options().apply 
                path = "/sockets/chat"
                query = "token=wrongtoken"
            )

  socket.on("unauthorized", object : Emitter.Listener  <== THIS NOT LUNCED!!
                override fun call(vararg args: Any?) 
                  println("user authentication failed" )
                
            

【问题讨论】:

【参考方案1】:

我认为您需要先通过在应用块中调用此行来连接到套接字

this.connect() 

【讨论】:

应用块用于“选项”。但是我会尝试socket.connect()【参考方案2】:

终于找到了在抛出错误时不需要从中间件发出的解决方案,您可以像这样在 android 客户端中获取预定义的事件:

socket.on(Socket.EVENT_ERROR)  args -> println(args.contentToString()) 

【讨论】:

以上是关于为啥没有调用android端的socket.io监听器?的主要内容,如果未能解决你的问题,请参考以下文章

带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets

android studio连接io.socket:sokect.io-client服务器的条件

socket.io 连接事件不起作用,为啥?

使用带有 Socket.io IOS 客户端的客户端证书

express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器

SpringBoot集成netty-socket.io