Witam. Mam prosty serwer do WebSocketów. Nawiązuje on połączenie i podtrzymuję, lecz nie otrzymuje żadnych danych, albo nie wiem w jaki sposób je odebrać.
  1.  
  2. function cmd( $buf, $clientIp ) {
  3. $arr = array( );
  4. $lines = explode( "\n", $buf );
  5. foreach ( $lines as $line ) {
  6. if ( strpos( $line, ":" ) === false )
  7. continue;
  8. $a = explode( ":", $line );
  9. $arr[ trim( $a[ 0 ] ) ] = trim( $a[ 1 ] );
  10. }
  11. $hash = base64_encode( sha1( $arr[ "Sec-WebSocket-Key" ] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true ) );
  12. $respond = "HTTP/1.1 101 Switching Protocols\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Accept: {$hash}\n";
  13. return $respond;
  14. }
  15.  
  16. function a() {
  17. $address = ( string ) "192.168.0.50";
  18. $port = ( int ) 5014;
  19. $sock = socket_create( AF_INET, SOCK_STREAM, 0 );
  20. while ( true ) {
  21. if ( socket_bind( $sock, $address, $port ) ) {
  22. break;
  23. }
  24. else {
  25. sleep( 3 );
  26. }
  27. }
  28.  
  29. echo "OK";
  30. socket_listen( $sock );
  31. while ( true ) {
  32. $client = socket_accept( $sock );
  33. socket_getpeername( $client, $clientIp );
  34. $input = socket_read( $client, 1024 );
  35. $output = "";
  36.  
  37. if ( empty( $input ) )
  38. continue;
  39. echo "Odebrano:" . $input . "\r\n";
  40. $output = cmd( $input, $clientIp );
  41. if ( ord( $output ) !== 0 ) {
  42. socket_write( $client, $output . "\r\n" );
  43. echo "Wysłano:" . $output . "\r\n";
  44. unset( $output );
  45. //socket_close( $client );
  46. }
  47. else {
  48.  
  49.  
  50.  
  51. //socket_close( $sock );
  52. a();
  53. }
  54. }
  55. }
  56.  
  57. a();


Przy połączeniu odbiera cała ramkę typu
Kod
GET / HTTP/1.1
Host: 192.168.0.50:5014
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: http://example.com
Sec-WebSocket-Key: NVmbNMVrhQSZmdbm/eBlFA==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

i odpowiada
Kod
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: nDnkbQ6/xHkFviQvWL5goM2k+zI=

Po połączeniu z klienta wysyłam mu tekst, lecz nigdzie go w otrzymanych danych nie widać. Wie ktoś może co tutaj jest źle i dlaczego to nie działa?