【问题标题】:Can a websocket message be intentionally split?可以故意拆分 websocket 消息吗?
【发布时间】:2020-05-07 06:26:11
【问题描述】:

我正在服务器上工作并完成了握手和基本的 websocket 取消屏蔽功能(服务器运行!)。我想知道如何测试我的片段处理代码。有没有办法使用 chrome 创建一个 websocket,连接到我的本地服务器,然后将“hello”拆分为 2 帧。我能够发送“你好”并在服务器上看到它。发送 hello 两次只是 2 条带有 fin 位的消息。

【问题讨论】:

  • 我不知道有一个客户端公开了一种分段消息的方法。我建议使用https://github.com/crossbario/autobahn-testsuite 作为Gorilla does 来测试您的服务器。测试套件包括碎片测试。
  • 我不知道...谢谢!我想我可以拿一个对象,将它序列化为一个字节数组,发送一半,将 fin 位设置为 0,然后发送另一半,将 fin 位设置为 1 并组装这两个部分......我只是希望有一种简单的方法来测试 chrome 将如何处理,因为我想支持网络浏览器。我会看看他们是怎么做的,以确保我的想法是正确的,所以再次感谢。

标签: go websocket


【解决方案1】:

当消息大小大于write buffer size 时,Gorilla client 会发送分段消息。

AutoBahn Test Suite 包括对碎片消息的测试。您可以使用Gorilla test server for Autobahn 作为测试的起点。

另一种选择是使用经过测试的Gorilla websocket package,而不是编写自己的 websocket 代码。

【讨论】:

  • 编写 websocket 代码很有趣!另外,你知道如何解决这个问题吗? stackoverflow.com/questions/8193761/… ?当我 ws.send("a".repeat(128)) 我的服务器说长度是 126。这是 chrome 的问题吗?无论我发送什么,我的第二个字节都是 11111110 :(
  • 126 是一个神奇的值,表示“实际消息长度太大,无法放入这个 7 位有效负载长度字段,因此已将其放置在以下两个字节中”。有关详细信息,请参阅tools.ietf.org/html/rfc6455 的第 5.2 节。 127 是另一个神奇的值,表示后面跟着一个 8 字节的消息长度。您的服务器需要能够处理这两种情况。
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2015-12-05
  • 2011-03-11
  • 2012-10-04
相关资源
最近更新 更多