Jump to content
  • 0

WebSocket


vpw1823
 Share

Question

Здравствуйте!

Технология 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');

Спасибо за внимание.

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • 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