Javascript PHP流WebSocket
我对sockets有点陌生,我试图在PHP上创建一个服务器来支持来自javascript的websockets调用。目前,我的代码如下所示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
<?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);
}