Dart websocket - 在断开连接之前发送信息

Pac*_*ane 1 websocket dart

我正在使用 websocket (来自 的套接字dart:html),我想知道当用户关闭浏览器或退出页面时是否可以发送消息。

我尝试了onClose这样的事件:

ws = new WebSocket('ws://$hostname:$port/ws');

ws.onOpen.listen(onSocketOpen);

ws.onClose.listen((e) {
  ws.send("I disconnected");
});
Run Code Online (Sandbox Code Playgroud)

但在这些特殊情况下它不会发送任何内容。或者,在我的服务器上我也尝试了这个,但是发生了以下onDone事件:

WebSocketTransformer.upgrade(req)
  ..then((socket) => socket.listen((msg) => doSomething(), onDone:() => print("connection closed)));
Run Code Online (Sandbox Code Playgroud)

这可行,但我想知道哪个客户端断开了连接(我想从实际断开连接的客户端发送一些内容的原因)。

有理由这样做吗?我真的不想查询所有其他客户端以了解当有人断开连接时他们是否仍然连接......

mon*_*r75 5

在服务器端,我喜欢使用将特定连接与用户相关联的数据结构,然后我不需要客户端在关闭时识别自己,因为我可以找出哪个客户端正在使用触发的连接onDone()。最简单的方法可能是使用这样的 Map:

Map<String, WebSocket>

在这种情况下,字符串是客户端 ID(或其他)。甚至可以反过来做:

Map<WebSocket, String>

您的 onDone() 处理程序将有一个 WebSocket 传递给它,您只需在数据结构中查找它即可找出与它关联的客户端。

请注意,要实现此目的,您的客户需要在连接后作为第一笔业务发送身份信息。当他们这样做时,您只需在地图中创建关联即可。

清澈如泥?