繁体   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