简体   繁体   中英

NodeJS and Primus.io WebSocket opening handshake was canceled

I'm trying to connect with Primus using websockets:

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

My NodeJS script:

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" });

Client:

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

I'm new to this kind of stuff, but I don't know whats wrong now, I have read the docs from Primus, I have also tried to Google but I can find the answer.

When I change to protocol to ws instead of wss I get the error

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.

@ Unexpected response code: 426 with PhanthomJS Websocket client/ROSLIB

Well, my VPS is behind a ngnix reversed proxy. I have no access to that.So thats why I'm using wss.

Demo: http://dev.dylaan.nl/play

Can somebody help?

Thanks!

It seems to me that you've configured your nginx server incorrectly and that it's blocking WebSocket connections causing a 400 error to be returned. See http://nginx.com/blog/websocket-nginx/ on how you can configure the server to allow websocket connections.

If you cannot get your host/vps to verify that WebSocket connects are allowed you can turn off WebSockets completely in Primus by supplying the option { websocket: false } in the client code:

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

I also noticed you used wss/ws instead of http which Primus requires, we will rewrite the HTTP based url in to the correct format automatically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM