javascript - WebSocket 连接到 'wss://localhost:44300/Home/websocketcon' 失败 : Error during WebSocket handshake: Unexpected response code: 404

标签 javascript node.js websocket

我正在尝试使用 node.js 和 websocket 在 mvc5 应用程序中实现 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 connection to 'wss://localhost:44300/Home/websocketcon' failed: Error during WebSocket handshake: Unexpected response code: 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 );

最佳答案

您的快速路由/服务器监听 http 请求,而不是 wss。看看这个:https://www.npmjs.com/package/express-ws

深入解释:

使用以下代码行,您已经创建了一个 http 服务器:

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

http 是您连接到 http://yoursite.com 时使用的协议(protocol)。但是,您正在尝试将 websocket 连接到您的服务器。为此,您需要添加一个 websocket 监听器并路由到您的服务器。这是因为 websocket 不通过 h​​ttp 协议(protocol)工作,它们通过 websocket 协议(protocol)工作。

要制作 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);
    });
});

关于javascript - WebSocket 连接到 'wss://localhost:44300/Home/websocketcon' 失败 : Error during WebSocket handshake: Unexpected response code: 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34309595/

相关文章:

javascript - 使用嵌套在两个键内的 JSON 代码创建一个数组

javascript - 在选定的索引更改时选择标记更改事件调用

javascript - Express:在 304 Not Modified 上发送 Content-Type

ios - 当wifi关闭然后再次启用时,如何重新连接socket.io iOS客户端?

java - SimpleWebSocket 类型中的 setBroadcaster(Broadcaster) 在 Grizzly java 中不可见

javascript - 警报随着 keyup 事件消失

javascript - json数据显示在表格中

javascript - 将 websocket 连接映射到数据库中的用户的最佳方法是什么?

node.js - Restify:如何在不与其他路由冲突的情况下提供静态文件?

javascript - 如何在 MongoDB 中创建动态正则表达式?