【问题标题】:How to format a WebSocket hybi-17 message?如何格式化 WebSocket hybi-17 消息?
【发布时间】:2011-11-28 18:58:12
【问题描述】:

我正在尝试编写我自己的用于 WebSockets 的 PHP 服务器。服务器看到连接并接收最新版本 (8) 的打开握手。 到目前为止一切正常,握手正常,客户端连接牢固。

接收消息也可以,但是当我想回复客户时,我的代码似乎不起作用。

我有以下服务器端代码来向客户端发送消息:

public function write($data, $handshake = false) {
    if ($handshake) {
        socket_write($this->socket, $data.chr(0), strlen($data)+1);
    } else {
        socket_write($this->socket, chr(0).$data.chr(255), strlen($data)+2);
    }
}
//Where $data is a JSON string

我相信部分是清楚的;第一个 socket_write 用于握手,另一个用于每个正常消息(例如,除了握手之外的所有消息)。

当我向客户端发送第一条消息时,客户端断开连接(仅此客户端)。 我已经将 chr(0) 和 chr(255) 替换到几乎每个地方(都在 $data 之前,都在后面,只有一个在前面/后面等),但似乎没有任何区别。

当我更改这些时,客户端不会断开连接,但也不会收到消息。

我希望你能把我送到正确的方向,因为我使用的最新 WebSocket 草案中几乎没有内容:hybi-17。

谢谢!

编辑: 以下是我必须使用的消息格式(参见 Len Holgate 的回复):

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-------+-+-------------+-------------------------------+
 |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
 |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
 |N|V|V|V|       |S|             |   (if payload len==126/127)   |
 | |1|2|3|       |K|             |                               |
 +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
 |     Extended payload length continued, if payload len == 127  |
 + - - - - - - - - - - - - - - - +-------------------------------+
 |                               |Masking-key, if MASK set to 1  |
 +-------------------------------+-------------------------------+
 | Masking-key (continued)       |          Payload Data         |
 +-------------------------------- - - - - - - - - - - - - - - - +
 :                     Payload Data continued ...                :
 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
 |                     Payload Data continued ...                |
 +---------------------------------------------------------------+

但是,我不知道如何构建它,因为我没有使用此类图表的经验。一个小例子或基本解释会非常方便。

【问题讨论】:

标签: php websocket messages


【解决方案1】:

Hixie76 草案和 HyBi-17 草案之间的基本 websocket 协议框架发生了很大变化。规范在这里:https://datatracker.ietf.org/doc/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.2

【讨论】:

  • 谢谢,我已经看过页面但我不知道如何实现格式图。我已将其包含在我的原始帖子中并扩展了我的问题。
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2011-12-30
  • 2011-12-16
  • 2020-03-18
  • 1970-01-01
  • 2017-04-24
  • 2023-03-26
相关资源
最近更新 更多