Рукопожатие открытия NodeJS и Primus.io WebSocket было отменено

Я пытаюсь подключиться к Primus с помощью веб-сокетов:

WebSocket connection to 'wss://dev.dylaan.nl/primus/?_primuscb=1417355606238-6' failed: WebSocket opening handshake was canceled

Мой скрипт NodeJS:

var express     = require("express")
,   fs          = require("fs")
,   path        = require("path")
,   moment      = require("moment")
,   Primus      = require("primus")
,   compression = require("compression")
,   app         = express()
,   http        = require("http").createServer(app)
,   jsp         = require("uglify-js").parser
,   pro         = require("uglify-js").uglify
,   primus      = new Primus(http, { transformer: "websockets" });

Клиент:

var primus      = new Primus("wss://dev.dylaan.nl")

Я новичок в таких вещах, но я не знаю, что сейчас не так, я прочитал документы от Primus, я также пытался использовать Google, но я могу найти ответ.

Когда я меняю протокол на ws вместо wss, я получаю сообщение об ошибке

Error during WebSocket handshake: Unexpected response code: 426

http 426 may mean that you are trying to connect with an unsupported websocket protocol version

Also, if you are connecting through a proxy, the proxy may remove the "upgrade" header from the request since it is marked as "connection" header. Switch to WSS:// to prevent that.

@ Неожиданный код ответа: 426 с клиентом PhantomJS Websocket/ROSLIB

Что ж, мой VPS находится за обратным прокси-сервером ngnix. У меня нет к этому доступа. Вот почему я использую wss.

Демо: http://dev.dylaan.nl/play

Кто-нибудь может помочь?

Спасибо!


person DazDylz    schedule 30.11.2014    source источник


Ответы (1)


Мне кажется, что вы неправильно настроили свой сервер nginx и что он блокирует соединения WebSocket, вызывая возврат ошибки 400. Подробнее о том, как настроить сервер, чтобы разрешить подключения через веб-сокет.

Если вы не можете заставить свой хост/vps проверить, что соединения WebSocket разрешены, вы можете полностью отключить WebSockets в Primus, указав опцию { websocket: false } в клиентском коде:

new Primus("http://dev.dylaan.nl", { websocket: false })

Я также заметил, что вы использовали wss/ws вместо http, который требует Primus, мы автоматически перепишем URL-адрес на основе HTTP в правильный формат.

person 3rdEden    schedule 15.12.2014
comment
Я использую Primus версии 2.4.10, и клиентская библиотека принимает URL-адреса ws://. - person op1ekun; 28.05.2015