簡體   English   中英

NodeJS 作為 Websocket 客戶端使用 ws

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM