Соединение с 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);
});
});