使用shelf_auth我可以提取要求这样当前用户的信息:
getAuthenticatedContext(request)
.map((ac) => ac.principal.name)
.getOrElse(() => 'guest')
但是,很显然,我需要一个请求该工作:)在另一方面,使用shelf_web_socket,建立WebSocket连接的执行处理这样的:
handleWS(CompatibleWebSocket ws){
// Here I should get user from getAuthenticatedContext()
// but I cannot due to absence of Request here.
ws.messages.listen(...);
};
rootRouter.get('/ws', webSocketHandler(handleWS), middleWare: authMiddleware);
但我不知道如何原始套接字连接请求转发到我的handleWS,才能够知道哪些用户只需连接到服务器。
另一个问题是什么是存储这些开放的插座,以能够广播消息发送给所有连接的客户端,并删除相应的插座在关闭时的最佳实践。 第一件事就是来我的心是存储插槽像一个地图Map<int,CompatibleWebSocket>
其中int是CompatibleWebSocket.hash()
然后,我可以遍历Map.values()
做广播,而当连接被关闭的键删除。
我不能说是否过于复杂的技术,这样的任务,可能存在更便捷的方式这样做,就像它们存储在一个列表? 或者,我可以加入流莫名其妙的广播?