Node.js и простой клиент-сервер web-socket-js не открываются - PullRequest
0 голосов
/ 08 мая 2011

Мой server.js кажется правильным ..

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "mysite.com");
console.log('Server running at mysite.com:1337/');

Мясо моего клиента ниже.

function init() {

  // Connect to Web Socket.
  // Change host/port here to your own Web Socket server.
  ws = new WebSocket("ws://mysite.com:1337");

  // Set event handlers.
  ws.onopen = function() {
    output("onopen");
  };

}

Если я перехожу на http://www.mysite.com:1337, я правильно получаю Hello World! Однако, когда я пытаюсь подключиться, используя мой клиент, и отлаживаю в Fire bug, я получаю следующий вывод.

[WebSocket] connected
[WebSocket] request header: GET / HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: mysite.com:1337 Origin: http://www.mysite.com Cookie: Sec-WebSocket-Key1: 115 17 p^!x-93 IERc16 7 Sec-WebSocket-Key2: 1 75 7Z i `. 8u $l031 4j9
[WebSocket] sent key3: ±Ôñ<g
[WebSocket] closed

И WebSocket автоматически закрывается, прежде чем я успеваю что-либо сделать. Кто-нибудь может пролить свет на ошибку, которую я получаю, и что, по вашему мнению, я должен сделать?

1 Ответ

5 голосов
/ 08 мая 2011

Вы создали HTTP-сервер node.js, но пытаетесь подключиться к нему как сервер WebSockets.Протокол WebSockets не является простым сокетом и не является простым HTTP-запросом.У WebSockets есть HTTP-подобное рукопожатие, но после этого у вас есть полнодуплексное соединение (например, сокеты и в отличие от HTTP), которое имеет небольшое количество кадровых сообщений (в отличие от простых сокетов).IO или node-websocket-server , если вы хотите создать сервер WebSockets для node.js.С другой стороны, если вы хотите подключиться из Javascript к обычному HTTP-серверу, используйте одну из замечательных библиотек Javascript с поддержкой AJAX, например jQuery .

...