[英]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.