У меня были проблемы в течение нескольких дней, пытаясь настроить простой сервер 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 может дать вам эту ошибку.