简体   繁体   English

NodeJS 作为 Websocket 客户端使用 ws

[英]NodeJS as Websocket client using ws

I need to send a message to a websocket server through request POST.我需要通过请求 POST 向 websocket 服务器发送消息。 The client is not a browser but a Node server.客户端不是浏览器,而是 Node 服务器。

I'm new to websocket.我是 websocket 的新手。

When I run the code below.当我运行下面的代码时。

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!");
});

It shows the error它显示错误

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'
}

I'm not sure how to do it with express, but it should be similar to https.我不知道如何用express来做,但它应该类似于https。 Here is how to do it with https.这是使用 https 的方法。

Basically it has to be the https server that should listen on certain port and also have certs and keys as option passed to it.基本上它必须是https server ,它应该侦听某些端口,并且还具有传递给它的证书和密钥作为选项。 Then you would pass the https server to websocket server .然后,您将https server传递给websocket server

When client connects, it'll connect to https and then upgrade to WSS.当客户端连接时,它将连接到 https,然后升级到 WSS。

Which means your client application can connect to wss://test.mysite.com:1234 .这意味着您的客户端应用程序可以连接到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