使用 express 初始化 ws 服务器
Initializing ws server with express
我一直在努力寻找以下代码中的错误来源:
const express = require("express");
const path = require("path");
const WebSocket = require("ws");
const SocketServer = WebSocket.Server;
const PORT = process.env.PORT || 3000; // port to listen on
const INDEX = path.join(__dirname, "index.html"); // index address
var server = express();
server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
const wss = new SocketServer({server}); // wss = web socket server
(我有下面的连接等代码,我认为与这个问题无关)
在 运行 之后,我在浏览器中收到来自客户端的以下错误:
与 'ws://localhost:3000/' 的 WebSocket 连接失败:连接在收到握手响应之前关闭
令我困惑的是,如果我进行以下更改,代码仍然有效:
var server = express()
.use((req, res) => res.sendFile(INDEX));
.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
此方法的问题是在现有 .use 之前添加另一个 .use 不起作用,这是访问静态文件所必需的(即 javascript 作为其自己的文件而不是在HTML 文件)
为什么在这两个示例之间更改我的代码会破坏它?我该怎么做才能解决这个问题?
谢谢
您需要将 http.createServer
实例传递给 WebsocketServer
。不是 express
实例
var app = express();
var server = http.createServer(app);
我找到了解决办法!
原来调用.use和.listen时必须设置server变量的值。
var server = express();
server = server.use((req, res) => res.sendFile(INDEX));
server = server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
而不是
var server = express();
server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
我一直在努力寻找以下代码中的错误来源:
const express = require("express");
const path = require("path");
const WebSocket = require("ws");
const SocketServer = WebSocket.Server;
const PORT = process.env.PORT || 3000; // port to listen on
const INDEX = path.join(__dirname, "index.html"); // index address
var server = express();
server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
const wss = new SocketServer({server}); // wss = web socket server
(我有下面的连接等代码,我认为与这个问题无关)
在 运行 之后,我在浏览器中收到来自客户端的以下错误:
与 'ws://localhost:3000/' 的 WebSocket 连接失败:连接在收到握手响应之前关闭
令我困惑的是,如果我进行以下更改,代码仍然有效:
var server = express()
.use((req, res) => res.sendFile(INDEX));
.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
此方法的问题是在现有 .use 之前添加另一个 .use 不起作用,这是访问静态文件所必需的(即 javascript 作为其自己的文件而不是在HTML 文件)
为什么在这两个示例之间更改我的代码会破坏它?我该怎么做才能解决这个问题?
谢谢
您需要将 http.createServer
实例传递给 WebsocketServer
。不是 express
实例
var app = express();
var server = http.createServer(app);
我找到了解决办法!
原来调用.use和.listen时必须设置server变量的值。
var server = express();
server = server.use((req, res) => res.sendFile(INDEX));
server = server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));
而不是
var server = express();
server.use((req, res) => res.sendFile(INDEX));
server.listen(PORT, () => console.log(`Listening on port ${ PORT }`));