Websocket不接收消息

时间:2012-08-22 23:13:19

标签: php javascript sockets websocket

服务器端:

<?php
  $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  socket_bind($socket, '127.0.0.1', 8000);
  socket_listen($socket);
  $client = socket_accept($socket);
  $handshake = socket_read($client, 1024);
  preg_match('/Sec-WebSocket-Key\: (.+?)\r\n/', $handshake, $accept);
  $accept = base64_encode(sha1("$accept[1]258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
  $handshake = "HTTP/1.1 101 Switching Protocols\r\n";
  $handshake .= "Upgrade: websocket\r\n";
  $handshake .= "Connection: Upgrade\r\n";
  $handshake .= "Sec-WebSocket-Accept: $accept\r\n\r\n";
  socket_write($client, $handshake.chr(0), strlen($handshake.chr(0)));
  socket_write($client, 's'.chr(0));
  sleep(5);
  socket_close($client);
  socket_close($socket);
?>

客户端:

<div id="output"></div>
<script>
    if ("WebSocket" in window) {
        var socket = new WebSocket('ws://127.0.0.1:8000');
        socket.onopen = function() {
            document.getElementById('output').innerHTML += 'socket open<br />';
        }
        socket.onmessage = function(msg) {
            document.getElementById('output').innerHTML += 'new msg: '+msg.data+'<br />';
        }
        socket.onclose = function() {
            document.getElementById('output').innerHTML += 'socket close';
        }
    }
</script>

我得到“套接字打开”并在5秒后“套接字关闭”。我没有得到服务器发送的“s” 试过Firefox和Chrome。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

客户端和服务器之间的消息不是纯文本。有关如何编码/解码消息的详细信息,请参阅协议规范的data framing部分。

其他SO问题(例如here)中有大量代码段可能会帮助您入门。