为啥没有调用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服务器的条件