如何在PHP中实现WebSocket握手?

时间:2017-08-29 06:51:37

标签: php websocket

我正在尝试编写一段代码,它将为Web套接字连接生成Sec-WebSocket-Accept值。我从网上资源(即MDN)收集的是你:

  1. 将客户端在Sec-WebSocket-Key中发送给您的字符串连接到GUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11);

  2. 获取此连接结果的SHA-1哈希值;

  3. 将结果转换为base 64。

  4. 因此,如果我理解正确,相应的PHP代码将是:

    base64_encode(sha1($sec-websocket-key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
    

    然而,这是不正确的。它与MDN上显示的示例不匹配(即在MDN上,WebSocket键的值dGhlIHNhbXBsZSBub25jZQ==应该返回s3pPLMBiTxaQ9kYGzzhZRbK+xOo=,但是使用我编写的PHP代码,它返回YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ== )。

    我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

<div id="button-container"> <button type="button">Button</button> <button type="button">Button</button> <button type="button">Button</button> <button type="button">Button</button> <button type="button">Button</button> </div>函数接受一个可选的第二个布尔参数,该参数使得它以20个字符的二进制形式而不是40个字符的十六进制形式返回原始SHA-1摘要(参见PHP Manual)。

WebSocket握手需要原始二进制格式。因此,您需要将第二个参数添加到sha1()函数。

sha1()