WebSocket连接到'wss:// localhost:44300 / Home / websocketcon'失败:WebSocket握手期间出错:意外的响应代码:404

我正在尝试在mvc5应用程序中使用node.js和websocket来实现websocket聊天,因为我正在使用URL重写器。

我使用以下代码创build了一个节点服务器。

var app = require('express')(); //creating http server var server = require('http').createServer(app); //add webrtc.io functionality to http server var webRTC = require('webrtc.io').listen(server); //port which is allocated dynamically by visual studeo IIS/iisexpress server, which of string formate. var port = process.env.PORT; //let the server in listen mode for the port id assigned by IIS server. server.listen(port); //this is for testing purpose, which returns the string, for the specified url request app.get('/test/websocketcon', function (req, res) { res.end("working"); }); 

如果我试图访问https:// localhost:44300 / test / websocketcon 。 我得到的答复是“工作”。 但是,如果我正在尝试创build新的WebSocket,我得到错误

WebSocket连接到'wss:// localhost:44300 / Home / websocketcon'失败:WebSocket握手期间出错:意外的响应代码:404

代码我试图创build新的websocket

  var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'; var address = protocol + window.location.host + window.location.pathname + "/websocketcon"; var createdwebsocket = new WebSocket(address ); 

你的快速路由/服务器监听http请求,而不是wss。 看看这个: https : //www.npmjs.com/package/express-ws

深入解释:

通过以下几行代码,您已经创build了一个http服务器:

 var app = require('express')(); var server = require('http').createServer(app); 

http是什么时候你连接到http://yoursite.com使用的协议。 但是,您正尝试将WebSocket连接到您的服务器。 要做到这一点,你需要添加一个websocket监听器和路由到你的服务器。 这是因为websocket不能通过http协议工作,他们通过websocket协议工作。

要制作websocket服务器,请检查我上面提供的链接/模块。 你应该有一个服务器来监听http请求和websocket请求。 要使您的当前代码与WebSockets一起工作,您需要做的是做出以下更改:

 var app = require('express')(); var server = require('http').createServer(app); // now add the express websocket functionality var expressWs = require('express-ws')(app); . . . app.ws('/test/websocketcon', function (ws, req) { ws.send("Working!"); ws.on('message', function(msg) { ws.send(msg); }); });