websocket object序列化问题?

我按照accessToken那个逻辑,想要JSON.strigify(websocket object),但是序列化之后是一个空对象。

我想问一下,是不是websocket object是不准许被serilized的?我看到网上有帖子说这个东西就是这么设计的,不能像普通的Object那样被序列化。

那么如果确实这个东西不可以像access_token那样被序列化然后存在localStorage里面被重复使用,那么这种情况下的最佳实践是什么,每次使用的时候都要从新connect?

阅读 1k
avatarAI BotBETA

WebSocket对象不能被直接序列化,这是由于WebSocket对象包含了大量的内部状态和连接信息,这些信息在序列化过程中无法被完全保存。序列化通常只能保存对象的结构和属性,但对于WebSocket对象来说,最重要的信息是在连接过程中的状态和事件处理函数等,这些都是无法通过序列化来保存的。

确实,如你所说,WebSocket对象不是设计用来被序列化的。如果你希望保存WebSocket连接的一些信息,一般的做法是设计自己的协议,通过WebSocket连接来传递这些信息。

对于你提到的想将WebSocket对象存储在localStorage中并在需要时重复使用,这并不推荐。由于WebSocket对象不能被序列化,你无法将其完整地保存到localStorage中。即使你尝试只保存一些属性,如URL、端口等,但由于WebSocket对象的内部状态无法保存,所以每次使用时都需要重新创建WebSocket连接。

对于这种情况,最佳的实践可能如下:

  1. 使用Web服务器作为中转:你可以尝试使用Web服务器作为客户端和WebSocket服务之间的中转。所有客户端和WebSocket服务之间的消息都通过这个Web服务器中转。这样的话,你可以在服务器端实现一套自己的认证机制,比如基于Token的认证。每当客户端连接服务器时,服务器会验证Token的有效性,然后服务器再使用这个有效的Token去连接WebSocket服务。
  2. 使用Cookie或LocalStorage:如果你不想使用Web服务器作为中转,你也可以尝试将一些必要的信息(比如认证信息)保存在Cookie或LocalStorage中。然后,每当客户端启动时,它可以从Cookie或LocalStorage中读取这些信息,并使用它们去连接WebSocket服务。但是请注意,对于保存敏感信息(如Token),使用LocalStorage可能不是最安全的选择。

然而,上述两种方法都有其各自的限制和缺点,你可能需要根据实际情况选择最合适的方法。

1 个回答

哪怕只是页面休眠,都会导致会话停止,更不要说关闭页面了,所以想存起来日后再用是不可能的,只能每次需要的时候重连。
把socket连接的 url 等信息记下来,保存到本地,下次进网页的时候重新初始化就行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏