2014-07-05 42 views
-4

如何通过Websocket传递WebSocket对象?为什么无法通过套接字传输WebSocket?

ws.onOpen.listen((e) { 
    outputMsg('Connected'); 
    WebSocket otherWebSocket = ...; 
    ws.send(otherWebSocket); // does not work 
    }); 
+0

*“不起作用”*取而代之的是什么? Web插座可能无法以合理的方式序列化和反序列化。 –

+0

这是不可能的。在某些时候,WebSocket会封装一个OS本地套接字,并且无法以任何方式有意义地序列化OS套接字。 – user1937198

+0

我这么认为。 RTC不发展。浏览器之间的连接可以在忘记p2p的同时... – Dima00782

回答

1

根据现有的评论,直接序列化一个像web套接字这样的对象是没有意义的。但是,有一个技巧,我已经看到在Python中可以使用可能在这里很有用。道歉,如果这有点模糊;我不知道Dart。

诀窍涉及编写一个包装WebSocket的类,并有一个被调用序列化的方法。类构造函数需要存储构造函数参数。

然后,序列化方法可以将这些构造函数参数和任何其他现有的“状态”数据(例如,尚未从web套接字读取的字节,与服务器相关的任何与会话相关的数据,例如密钥,客户端ID,等等)和关闭 WebSocket。

收件人将能够基于这些参数创建新的WebSocket并基于该状态数据恢复与服务器的交互。

很显然,这将需要在套接字的另一端的服务器合作关闭和重新打开套接字,并继续进行,就像没有发生任何事情一样。如果服务器不打算这样做,那么这种技术将无法工作。

Python code我指的是如何序列化文件描述符。它所做的只是序列化文件的路径和名称,当前文件位置,读/写模式等。这允许序列化文件的接收者以与之前相同的状态重新打开文件。