使用shelf_auth和shelf_web_套接字验证Dart中的websocket连接

使用shelf_auth和shelf_web_套接字验证Dart中的websocket连接,websocket,dart,dart-shelf,Websocket,Dart,Dart Shelf,使用shelf_auth,我可以通过以下方式从请求中提取当前用户信息: getAuthenticatedContext(request) .map((ac) => ac.principal.name) .getOrElse(() => 'guest') 但是,很明显,我需要一个这样的请求: 另一方面,使用shelf_web_socket,websocket连接的建立执行如下处理程序: handleWS(CompatibleWebSocket ws){ // Here I

使用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的map中,其中int是CompatibleWebSocket.hash

然后我可以迭代Map.values进行广播,并在连接关闭时按键删除

我不知道这项技术对于这样的任务是否过于复杂,是否存在更方便的方法,比如将它们存储在列表中?或者我可以加入流媒体进行广播吗