Chrome отключается после рукопожатия WebSockets - PullRequest
4 голосов
/ 23 июля 2011

Я пытаюсь заставить простой пример WebSocket работать на моей машине (localhost), у меня JavaScript и C # работают нормально и подключаются, за исключением того, что Chrome отключается после рукопожатия.

Я искал все утро и думаю, что это как-то связано с той же политикой домена, как предполагает другой «вопрос», я обновил свой браузер до последней версии (12.xxx).

Однако я не смог найти решение своей проблемы.

Я использую на стороне C #:

ConnectionOrigin = "http://localhost:8080";
ServerLocation = "ws://localhost:8181/test";

И я использую JavaScript, используя обычный HTML-файл, открытый прямо издиск (file:/// на панели URL).Я также пытался использовать XAMPP для локального размещения, но у меня всегда одна и та же проблема.

В приложении идет вывод журнала программы C #:

   New connection from 127.0.0.1:8181 requested. Handshaking ...
Reading handshake ...
GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

Sending handshake ...
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://localhost:8080
WebSocket-Location: ws://localhost:8181/test


New connection from 127.0.0.1:8181 established.
http://localhost:8080
Data sent to the client ["Time at the server: 23-07-2011 12:57:27"]
Client disconnected.
Waiting for another connection attempt ...

Ответы [ 2 ]

5 голосов
/ 25 июля 2011

В случае этого запроса:

GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

ответ должен быть:

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://localhost:8181/test

the response code here

Итак:

  • Это WebSocket, а не Web Socket в первой строке.
  • Это Sec-WebSocket-..., а не WebSocket-....
  • Вы не включили код ответа, который является неотъемлемой частью рукопожатия (конструкция которогоописано в спецификации ).
  • Кроме того, вы должны использовать \r\n, а не \n (если вы этого еще не сделали).

Кстати, вы можете обратиться к chrome://net-internals/ (вкладка Events и затем поискать соответствующий SOCKET_STREAM), чтобы узнать, какой ответ на самом деле получил Chrome.

0 голосов
/ 23 июля 2011

Может быть, вам нужно установить Connection: keep-alive: http://en.wikipedia.org/wiki/HTTP_persistent_connection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...