net::ERR_CONNECTION_REFUSED 使用网络套接字

net::ERR_CONNECTION_REFUSED using websockets

我正在尝试创建一个没有任何框架的 websocket,在 vanilla JavaScript。

我正在尝试发送基本文本 websocket,但它一直向我抛出错误 net::ERR_CONNECTION_REFUSED

Here's the code on repl.it

我设置了内容安全策略:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">

我的 websocket 在 9000 端口设置为 ws://localhost/。

无论如何,这是我的 script.js 文件:

let a = new WebSocket("ws://localhost:9000");
a.onopen = () => {
  setTimeout(() => {
    a.send("working?");
  }, 1000);
};
a.onmessage = (event) => {
  console.log(event.data);
}
和我的 srv.js(在 nodejs 中)文件:

let server = require('ws').Server;
let srv = new server({port: 9000});
srv.on('connection', ws => {
  ws.on('message', msg => {
    console.log(`Received message => ${msg}`)
  })
  ws.send('hey')
})

我看到我的这个老问题没有得到解答,之后我深入研究了websockets,发现我认为的问题是我没有在服务器中设置'Access-Control-Allow-Origin': "*" 对于 ws 它将是:

let server = require('ws').Server;
let srv = new server({port: 9000, 'Access-Control-Allow-Origin': "*"});
srv.on('connection', ws => {
  ws.on('message', msg => {
    console.log(`Received message => ${msg}`)
  })
  ws.send('hey')
});

虽然我的问题是不正确的,因为 ws 是一个帮助 websockets 的外部模块,但任何认为没有这个模块就可以轻松制作 websocket 服务器的人是错误的,这是可能的,但只是一个简单服务器的代码量就像我的问题一样,需要将近 50 行代码,这是不值得的,因为 ws 有许多特性,比不使用外部模块更容易、更可靠。

对于任何想以学习为目的实际制作它的人here's the websocket protocol explained, but since they don't provide code I made a repl on repl.it