我试图在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");
});
如果我想要访问https://localhost:44300/test/websocketcon。我得到的回应是"工作"。但是,如果我正在尝试创建新的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 );
答案 0 :(得分:2)
您的快速路由/服务器侦听http请求,而不是wss。看看这个:https://www.npmjs.com/package/express-ws
深入解释:
使用以下代码行,您已创建了一个http服务器:
var app = require('express')();
var server = require('http').createServer(app);
http是您连接到http://yoursite.com
时使用的协议。但是,您正在尝试将websocket连接到服务器。为此,您需要添加一个websocket侦听器并路由到您的服务器。这是因为websockets不能通过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);
});
});