Соединение с WebSocket с 'wss://localhost: 44300/Home/websocketcon' не выполнено: Ошибка при рукопожатии WebSocket: Неожиданный код ответа: 404

Я пытаюсь внедрить websocket chat в приложение 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. Я получаю ответ как "работающий". Но если я пытаюсь создать новый websocket, я получаю ошибку как

Соединение с WebSocket с 'wss://localhost: 44300/Home/websocketcon' failed: Ошибка во время рукопожатия 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

ваш экспресс-маршрут/сервер прослушивается для http-запросов, а не wss. проверьте это: https://www.npmjs.com/package/express-ws

Подробное объяснение:

Со следующими строками кода вы создали http-сервер:

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

http - это протокол, который вы используете, когда подключаетесь к http://yoursite.com. Однако вы пытаетесь подключить веб-сервер к своему серверу. для этого вам нужно добавить слушателя и маршрут на ваш сервер. Это связано с тем, что веб-сайты не работают над протоколом http, они работают над протоколом websocket.

Чтобы создать сервер websocket, проверьте ссылку/модуль, который я изложил выше. У вас должен быть сервер, который прослушивает как HTTP-запросы, так и запросы на веб-рассылку. Чтобы ваш текущий код работал с веб-сайтами, вам нужно сделать следующие изменения:

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