Назад | Перейти на главную страницу

Настройте сервер websocket на Amazon Linux AMI с помощью Node.js

У меня были проблемы в течение нескольких дней, пытаясь настроить простой сервер websocket на экземпляре Amazon EC2. Я использую микроэкземпляр Linux. После первой загрузки я обновил все пакеты ОС, следовал этому отличному руководству по установке node и npm, установлен socket.io, express (в настоящее время не используется) и websocket.io, который включает веб-сервер по miksago.

Во-первых, мои попытки использовать Socket.io в качестве бэкэнда. Я установил простой сервер, используя образец кода с их веб-сайта, указанный ниже. Я управляю этим с sudo node server.js. Я использую sudo, чтобы прослушивать порт 80, иначе возникают ошибки. Отсюда я помещаю свой общедоступный DNS amazon в поле местоположения при эхо-тесте websocket.org. Когда я нажимаю кнопку подключения, мой сервер выводит debug - destroying non-socket.io upgrade. У меня есть консольный вывод в прослушивателе "соединения", который никогда не распечатывается, поэтому кажется, что есть ошибка до того, как запрос на соединение пройдет. Возможно, мне придется использовать клиентскую часть socket.io для работы сервера socket.io, но я не смог найти окончательного ответа на этот вопрос.

Моя вторая попытка заключалась в использовании веб-сервера Miksago. Я также перечислю источник для сервера ниже. На этот раз я смог увидеть этот вывод консоли в запросе на соединение, но соединение все еще не было установлено. Я попытался распечатать объект connection.header, но получил ошибку.

Я пытаюсь настроить простой сервер, чтобы понять основы, и мне не удалось определить, в чем проблема. Я использую websocket.org для тестирования сервера, поскольку их клиент настроен правильно. Что я делаю неправильно при настройке сервера?

Socket.io server
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  console.log("Connection request on socket.io server");
});



Websocket-Server
var ws = require("websocket-server");

var server = ws.createServer();

server.addListener("connection", function(connection){
  console.log("Connection request on Websocket-Server");
});

server.listen(80);

Изменить: вывод отладки с сервера node-websocket. Это фрагмент вывода из console.log(connection._req); Информация выглядит верной, но сервер просто не устанавливает соединение.

httpVersion: '1.1',
complete: true,
headers: 
 { upgrade: 'websocket',
   connection: 'Upgrade',
   host: 'ec2-50-16-107-223.compute-1.amazonaws.com',
   origin: 'http://websocket.org',
   'sec-websocket-key': 'HdgJaiL2TZ4iyOHTarmlig==',
   'sec-websocket-version': '13' },
trailers: {},
readable: true,
url: '/',
method: 'GET',
statusCode: null,

Edit2: используйте websocket.io в качестве сервера веб-сокетов на Node.js. Он работает без необходимости использования js-файлов на стороне клиента и более актуален со спецификациями. Он доступен через npm и git.

В соответствии с этот вопрос StackOverflow, вы должны использовать клиентский код socket.io. Использование клиентского кода websocket.org может дать вам эту ошибку.