【发布时间】:2021-08-04 05:02:36
【问题描述】:
过去几天我一直在摆弄 WebSockets,并取得了一些成功。特别是,我可以让客户端通过“ws://localhost:8080”连接到服务器。但是,第二次我将其更改为“wss://localhost:8080”,我的客户端无法再连接,并且 WebSocket API 可以告诉我的最好的结果是“哈哈,你有一个错误”,我不知道如何解决这个问题。我正在使用 Microsoft Edge 浏览器来支持客户端,并使用 node.js / express 来设置服务器。我一直在网上搜寻不太成功的答案。我唯一的猜测是 Edge 搞乱了我的 WebSocket 连接。总的来说,我的最终目标是解决我的一个程序中的另一个问题,其中“wss”连接工作了 2 周,然后突然没有了。任何帮助或见解将不胜感激。
更新:我通过 ngrok 公开“localhost:8080”让“wss”工作。然而,更奇怪的事情发生了——有一半的时间,WebSocket 连接已经建立并且一切正常。但另一半——websocket 连接失败。我真的被困住了。
以下是一些相关代码:
客户:
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name="viewport" content = "width-device-width, initial-scale-1.0">
<title>Socket Thing 1</title>
</head>
<body>
Client1
<button
onclick="sendMessage()">Send Msg</button>
</body>
<script>
const socket = new WebSocket('wss://localhost:8080');
socket.addEventListener('open', function (event) {
console.log('Connected to Web Socket server');
});
socket.addEventListener('message', function (event) {
console.log("Client 1 received new message from server");
});
socket.onerror = (event) => {
console.error("Web Socket error observed: " + event);
}
const sendMessage = () => {
socket.send('Hello from Client1');
}
</script>
</html>
服务器:
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const WebSocket = require('ws');
const wss = new WebSocket.Server( { server });
wss.on('connection', ws => {
console.log('New client connected');
ws.send('Welcome new client');
ws.on('message', message => {
console.log('Received a message: ' + message);
ws.send("Message from server: Got your message");
wss.clients.forEach(function each(client) {
// don't send to current ws client
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message); // send to all other clients
}
});
});
});
app.get('/', (req, res) => res.send('Hello World!'));
server.listen(8080, () => console.log('Listening on port : 8080'));
【问题讨论】:
标签: javascript node.js express websocket wss