当前位置: 首页 > 知识库问答 >
问题:

javascript - websocket object序列化问题?

韦晟睿
2023-09-23

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

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

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

共有2个答案

张可人
2023-09-23

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

澹台新知
2023-09-23

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可能不是最安全的选择。

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

 类似资料:
  • 问题内容: 每当我尝试序列化文件时,都会收到错误消息:FileNotFound。不知道为什么。这是我的FileHelper代码: 问题答案:

  • 目前,我正在使用Avro1.8.0序列化/反序列化对象,但面临一些问题,特别是java.util.Map对象。不面临其他类型对象的问题。 这里的示例代码- 在deserialize方法中,我试图根据输入数据获取模式,但avro抛出错误- 多谢了。

  • 好的,我做了更改,下面是我得到的JSON响应 它现在导致一个嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配 NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配org.springframework.web.servlet.framework.ser

  • 问题内容: 我在流程之前有这个: 然后在另一部分 为什么我收到ClassCastException? 问题答案: 最终我以这种方式工作:

  • 谷歌要求设计一个算法来序列化和反序列化二叉树。我在网上找到了一个解决方案。我不太理解的部分是为什么在第20行需要这个条件,其中“if node==None:”,self。根=节点(值)?因为毕竟,该程序将提示用户以例如:1,3,5的形式输入节点,以便程序工作,因此不会出现节点=无的情况,因为用户输入是必要的?我是不是误解了什么?