websockets、express.js 无法建立与服务器的连接
Posted
技术标签:
【中文标题】websockets、express.js 无法建立与服务器的连接【英文标题】:websockets, express.js and can’t establish a connection to the server 【发布时间】:2017-02-26 18:54:12 【问题描述】:这是WS 和express.js
上的简单聊天。我收到浏览器无法通过websockets
连接到服务器的错误。
客户端连接:
file: rtc.html
ws = new WebSocket('wss://' + window.location.hostname + '/wr' );
ws.onerror = (error) => console.log(error); ;
ws.onmessage = (message) =>
. . .
服务器代码:
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const app = express();
app.get('/rtc', (req, res)=>
res.sendFile('/home/user/dev/rtc.html');
);
const server = http.createServer(app);
const wss = new WebSocket.Server( server:server, path: "/wr" );
. . .
app.listen(3000);
UPD:问题是因为我在webrtc
上聊天并在Mozilla
和Mozilla
进行测试,如果没有https
连接,getUserMedia
运行良好。
有必要这样写:
var https = require('https');
var serv = https.createServer(serverConfig, app);
【问题讨论】:
您使用的是哪个服务器端 webSocket 库? 那个:github.com/websockets/ws 【参考方案1】:更改自:
app.listen(3000);
到:
server.listen(3000);
当您使用app.listen()
时,它会创建一个新的http 服务器,因此您连接socket.io 的服务器永远不会启动。要完全理解app.listen()
,它的代码如下所示:
app.listen = function()
var server = http.createServer(this);
return server.listen.apply(server, arguments);
;
因此,您可以看到它正在创建一个与您附加 webSocket 服务器的 http 服务器不同的 http 服务器,因此另一个从未启动过。
或者,您也可以这样做:
const server = app.listen(3000);
const wss = new WebSocket.Server( server:server, path: "/wr" );
而且,根本不要创建自己的 http 服务器。 app.listen()
返回它创建的新服务器对象。
【讨论】:
我将:app.listen(3000);
替换为:server.listen(3000);
,但仍无法连接
@alex10 - 然后你需要做一些故障排除/调试。在 Chrome 浏览器中,查看调试器中的网络选项卡,并准确查看加载页面时客户端发生的情况。特别是,您将寻找在 webSocket 上进行连接的尝试,并查看从中返回(或不返回)什么。如果您在加载页面时不知道如何在页面中打开 Chrome 调试器,那么请在 Google 上找到它,您应该会找到大量有关如何执行此操作的信息。您将希望网络选项卡能够查看您的 webSocket 连接发生了什么。
我找到了问题所在。写到最后,问题很奇怪。
你给出了正确的答案。我的问题是要提供更多详细信息。
谢谢!这正是我所缺少的:)【参考方案2】:
只要确保你使用 server.listen()。让代码自己说话
var express = require('express'),
app = express(),
http = require('http'),
server = http.createServer(app),
WebSocketServer = require('ws').Server,
wss = new WebSocketServer( server );
app.use(express.static(__dirname));
server.listen(process.env.PORT || 3000, function () //
console.log("Node server is running on http://localhost:3000/"); );
wss.on('connection', function (ws)
//console.log("New connection.");
ws.on('message', function (message)
//console.log("Message received:", message);
);
【讨论】:
以上是关于websockets、express.js 无法建立与服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章
从 node.js 和 websockets 访问 IPython 命令行