2015-01-30 2 views
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 요청).

답변

0

메시지를 처리해야한다 -

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

글쎄 내 콘솔에 아무것도 기록하지 않습니다. 클라이언트가 메시지를 보내는 사람이기 때문에 왜 그것을 처리해야합니까?. 감사 –