Jump to content

vpw1823

Neophyte
  • Posts

    1
  • Joined

  • Last visited

vpw1823's Achievements

Explorer

Explorer (1/14)

0

Reputation

  1. vpw1823

    WebSocket

    Здравствуйте! Технология WebSocket относительно новая и по этому информации даже в интернете по ней не много. Есть конечно официальные документации, но на английском. Даже прочитав в Википедии не все понятно. Единственное что понял, это то, что браузер и сервер должны вначале "пожать руки". Руки пожимают отправлением друг другу заголовков: Заголовок браузера: GET /demo HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: example.com Origin: http://example.com WebSocket-Protocol: sample Заголовок сервера: HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade WebSocket-Origin: http://example.com WebSocket-Location: ws://example.com/demo WebSocket-Protocol: sample После "пожатия рук" соединение остается открытым и браузер общается с сервером на равных - происходит двусторонняя связь. Код на клиентской стороне тоже, в принципе, понятен: <html> <head> <script> var webSocket = new WebSocket('ws://localhost/echo'); webSocket.onopen = function(event) { alert('onopen'); webSocket.send("Hello Web Socket!"); }; webSocket.onmessage = function(event) { alert('onmessage, ' + event.data); webSocket.close(); }; webSocket.onclose = function(event) { alert('onclose'); }; </script> </head> <body> </body> </html> Так-сяк, вроде бы все и понятно. Но как именно это все работает - не могу понять. На компьютере (ОС - Windows XP) установлен Apache, PHP и MySQL - относительно серверной части, больше не установлено ничего. Имеются два файла: http://localhost/ws.php - соответствует клиенту http://localhost/wss.php - соответствует серверу Теперь о том что не понятно. I. Заголовки Как именно надо посылать эти заголовки? Правильно ли использовать такой код (клиент): <?php header("Get /demo HTTP/1.1"); header("Upgrade: WebSocket"); header("Connection: Upgrade"); header("Host: example.com"); header("Origin: http://example.com"); header("WebSocket-Protocol: sample"); ?> и, соответственно (сервер): <?php header("HTTP/1.1 101 Web Socket Protocol Handshake"); header("Upgrade: WebSocket"); header("Connection: Upgrade"); header("WebSocket-Origin: http://example.com"); header("WebSocket-Location: ws://example.com/demo"); header("WebSocket-Protocol: sample"); ?> II. Заголовок клиента 1. В строке GET /demo HTTP/1.1 что означает /demo и на что ее заменять? 2. Куда надо подставлять http:// и ws://, а так же куда подставлять localhost, ws.php и wss.php? III. Заголовок сервера 1. В строке WebSocket-Protocol: sample что означает sample и на что ее заменять? 2. Куда надо подставлять localhost, ws.php и wss.php? IV. Код на стороне клиента 1. В строке var webSocket = new WebSocket('ws://localhost/echo'); что означает echo и на что ее заменять? V. Код сервера и общение браузера с сервером На сайте Хабрахабр написано: "Как только одна сторона хочет передать другой какую-то информацию, она отправляет дата-фрейм следующего вида:" 0x00, <строка в кодировке UTF-8>, 0xFF 1. Всегда ли надо указывать 0xFF или это зависит от размера сообщения. Например, 0x00, <строка в кодировке UTF-8>, 0x18. 2. Правильно ли будет использовать для отправки сообщения, примерно, такой код: <?php $s = "Привет!"; $s = iconv("Windows-1251", "UTF-8", $s); echo "0x00, $s, 0xFF"; ?> Заключение Открываю в браузере (Firefox 11) http://localhost/ws.php - браузер выполняет команду alert('onclose'); Спасибо за внимание.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy