我正在尝试使用普通JavaScript创建一个没有任何框架的websocket。
我正在尝试发送基本文本websocket,但它总是使我抛出错误net :: ERR_CONNECTION_REFUSED
我设置了内容安全政策:
<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);
}
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')
})
答案 0 :(得分:0)
我看到我的这个老问题没有得到回答,之后我深入研究了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进行了解释,但是由于他们不提供代码,所以我做了repl on repl.it