[英]How to send “Upgrade” handshake to WebSocket server from client using ws npm module in nodejs?
[英]NodeJS as Websocket client using ws
我需要通过请求 POST 向 websocket 服务器发送消息。 客户端不是浏览器,而是 Node 服务器。
我是 websocket 的新手。
当我运行下面的代码时。
var WebSocket = require("ws");
const express = require("express");
var app = express();
const client = new WebSocket(process.env.URL);
client.on("error", handleError);
client.onopen = () => {
client.send("Message From Client");
};
function handleError(error) {
console.log(error);
}
app.get("/echo", async function (req, res) {
client.once("connection", function connection(cli) {
cli.send(msg);
res.send("send");
});
});
app.listen(3333, function () {
console.log("Example app listening on port 3333!");
});
它显示错误
Error: write EPROTO 19524:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:
at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16) {
errno: 'EPROTO',
code: 'EPROTO',
syscall: 'write'
}
我不知道如何用express来做,但它应该类似于https。 这是使用 https 的方法。
基本上它必须是https server
,它应该侦听某些端口,并且还具有传递给它的证书和密钥作为选项。 然后,您将https server
传递给websocket server
。
当客户端连接时,它将连接到 https,然后升级到 WSS。
这意味着您的客户端应用程序可以连接到wss://test.mysite.com:1234
。
const https = require('https')
const options = {
cert: fs.readFileSync('/etc/ssl/test.mysite.com/cert.pem'),
key: fs.readFileSync('/etc/ssl/test.mysite.com/privkey.pem'),
ca: fs.readFileSync('/etc/ssl/test.mysite.com/chain.pem')
};
const httpsServer = https.createServer(options);
httpsServer.listen(1234, () => console.log('Https Server running on port 1234'));
var ws = new WebSocket.Server({
server: httpsServer
});
ws.on('connection', socket => {
console.log('Conencted')
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.