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

Javascript 连接到'的WebSocket;wss://localhost:44300/Home/websocketcon' 失败:WebSocket握手期间出错:意外响应代码:404,javascript,node.js,websocket,Javascript,Node.js,Websocket,我试图在mvc5应用程序中使用node.js和websocket实现websocket聊天。为此,我使用URL重写器 我用以下代码创建了一个节点服务器 var app = require('express')(); //creating http server var server = require('http').createServer(app); //add webrtc.io functionality to http server var webRTC = require('web

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

我用以下代码创建了一个节点服务器

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");
});
如果我试图访问。我得到的回应是“工作”。但如果我试图创建新的websocket,我会得到如下错误:

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

代码我尝试创建新的websocket

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

您的express route/服务器侦听http请求,而不是wss。看看这个:

要深入解释:

通过以下代码行,您已经创建了http服务器:

var app = require('express')();
var server = require('http').createServer(app);
http是连接到
http://yoursite.com
。但是,您正在尝试将websocket连接到服务器。为此,您需要添加一个websocket侦听器并路由到服务器。这是因为websocket不通过http协议工作,而是通过websocket协议工作

要创建websocket服务器,请签出我上面提供的链接/模块。您应该有一个同时侦听http请求和websocket请求的服务器。要使当前代码与WebSocket一起工作,您需要做以下更改:

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

我已经在另一台没有express ws的服务器上创建了相同的环境,即使在进行了您建议的更改之后,express ws仍然可以正常工作errorwss://localhost:44300/test/websocketcon 返回文本,因为此网页不可用