1
소켓의 물건
임 좀 새로운 임 현재 내 코드는이PHP 스트림 WebSocket을
<?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;
}
}
}
}
처럼 보인다 그리고 내 자바 스크립트는 단순한
내 자바 스크립트에서 호출 WebSocket을 지원하기 위해 PHP의 서버를 만들려고 노력var socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event)
{
console.log('connected');
socket.send('hello');
}
현재 연결된 메시지가 내 크롬 콘솔에 표시하지만, 헬로 메시지를 내가이 오류를
"도없고 얻을 전송 가정 할 때 그 이후 ction : xxx 페이지가로드되는 동안 중단되었습니다 "
그럼 내 질문에 성공적으로 클라이언트에 핸드 셰이크를 보내면 어떻게 메시지를 처리합니까? 나는 내 코드가 항상 새로운 연결에 핸드 셰이크를 보내는 것을 알고 있지만 내 서버에서는 "hello"가 아닌 첫 번째 메시지가 표시된다 (http 요청).
글쎄 내 콘솔에 아무것도 기록하지 않습니다. 클라이언트가 메시지를 보내는 사람이기 때문에 왜 그것을 처리해야합니까?. 감사 –