使用shelf_auth和shelf_web_socket

时间:2015-05-23 09:40:16

标签: websocket dart dart-shelf

使用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进行广播吗?

0 个答案:

没有答案