Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP流WebSocket_Javascript_Php_Websocket - Fatal编程技术网

Javascript PHP流WebSocket

Javascript PHP流WebSocket,javascript,php,websocket,Javascript,Php,Websocket,我对sockets有点陌生,我试图在PHP上创建一个服务器来支持来自javascript的websockets调用。目前,我的代码如下所示 <?php class Websocket { private $server; private $sockets = []; public function create($host) { $this->server = stream_socket_server('tcp://localho

我对sockets有点陌生,我试图在PHP上创建一个服务器来支持来自javascript的websockets调用。目前,我的代码如下所示

<?php

class Websocket
{
    private $server;

    private $sockets = [];

    public function create($host)
    {
        $this->server = stream_socket_server('tcp://localhost:8080', $errno, $errmsg);
        stream_set_blocking($this->server, 0);
    }

    public function run()
    {
        while(true)
        {
            $client = stream_socket_accept($this->server);

            if($client)
            {
                $data = stream_socket_recvfrom($client, 2048);

                if($data)
                {
                    echo 'Client connected'.PHP_EOL;
                                        echo $data;
                    $response = $this->handshake($data);

                    stream_socket_sendto($client, $response);
                }
            }
        }
    }

    private function handshake($data)
    {
        $data = explode(PHP_EOL, $data);

        foreach($data as $header)
        {
            $current_header = explode(':', $header);

            if($current_header[0] == 'Sec-WebSocket-Key')
            {
                $accept = base64_encode(sha1(trim($current_header[1]).'258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
                $response = 'HTTP/1.1 101 Switching Protocols'.PHP_EOL.'Upgrade: websocket'.PHP_EOL.'Connection: Upgrade'.PHP_EOL.'Sec-WebSocket-Accept:'.$accept.PHP_EOL.PHP_EOL;

                return $response;
            }
        }
    }
}
当前,连接的消息出现在我的chrome控制台上,但之后当hello消息应该被发送时,我收到了这个错误

“加载页面时,与xxx的连接被中断”


所以我的问题是,在我成功地将握手发送给客户端之后,我该如何处理消息?我知道我的代码总是向新连接发送握手,但在我的服务器上,我只会看到第一条消息被回响(http请求),而不是“hello”消息,您需要处理该消息-

socket.onmessage = function(e){
   var server_message = e.data;
   console.log(server_message);
}

嗯,这不会在我的控制台中记录任何内容。既然客户机是发送消息的人,为什么我需要处理它?。谢谢
socket.onmessage = function(e){
   var server_message = e.data;
   console.log(server_message);
}