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

13

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

我使用以下代码创建了一个node服务器。

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,我会得到“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 );
1个回答

2
你的Express路由/服务器用于监听HTTP请求,而不是WSS。请查看此链接:https://www.npmjs.com/package/express-ws 深入解释一下:
通过下面的代码,你已经创建了一个HTTP服务器:
var app = require('express')();
var server = require('http').createServer(app);

当你连接到 http://yoursite.com 时,你使用的是何种协议呢?那就是http协议。但是,如果你想要连接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);
    });
});

我已经在另一台服务器上创建了相同的环境,没有使用 express-ws,现在完美运行。 - buvi suri
即使按照您建议的更改,我仍然遇到相同的错误。 - buvi suri
wss://localhost:44300/test/websocketcon 返回的文本为“此网页不可用”。 - buvi suri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接