首页 文章

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

提问于
浏览
1

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

我尝试了这样的onClose事件:

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

ws.onOpen.listen(onSocketOpen);

ws.onClose.listen((e) {
  ws.send("I disconnected");
});

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

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

这有效,但我想知道客户端断开连接(我之所以想从实际断开连接的客户端发送一些东西)。

有没有理由这样做?我真的不想询问所有其他客户,以便在有人断开连接时知道他们是否仍然连接...

2 回答

  • 4

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

    Map<String, WebSocket>

    在这种情况下,String 是客户端 ID(或其他)。甚至可以反过来做到这一点:

    Map<WebSocket, String>

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

    请注意,要使其正常工作,您的客户需要在连接后将识别信息作为第一个业务订单发送。当他们这样做时,您只需在地图中创建关联。

    像泥一样清楚?

  • 1

    据我所知window.onBeforeUnload是正确的事件。这个事件处理程序允许有一些限制。例如,不可能阻止关闭窗口。

相关问题