1

使用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()进行广播,并在连接关闭时按键删除。

如果该技术对于此类任务过于复杂并且可能存在更方便的方式来执行此操作,例如将它们存储在列表中,我无法理解?或者我可以以某种方式加入 Streams 进行广播吗?

4

0 回答 0