【问题标题】:Express node js webssockets is recieving messages from websocket server but not being able to send themExpress node js websockets正在从websocket服务器接收消息但无法发送它们
【发布时间】:2021-02-28 06:30:09
【问题描述】:

我使用 aws api 网关设置了 websockets,我还有一个使用 node 和 express 和 ws websockets 运行的 ec2 实例,我可以使用 wscat 向 apigateway wss url 发送一条消息,它会显示在 ec2 实例中,但是如果我从 ec2 实例发送消息,它不会显示在 wscat 中。我按照这个 tut 设置了 apigateway https://aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/

这里是 ec2 实例代码。我不太确定它可能有什么问题

const express = require("express");
const app = express();
const port = 8080;
const WebSocket = require("ws");
const url = "wss://obsf.execute-api.us-east-1.amazonaws.com/Prod";
const ws = new WebSocket(url);

process.setMaxListeners(0) // I have tried with and without this line

app.get("/", (req, res) => {
  var test = { action: "sendmessage", data: "hello world" };

  ws.on("open", function open() {
    ws.send(JSON.stringify(test));
  });

  ws.on("message", function incoming(data) {
    console.log(data);
  });

  ws.on('error', (error) => {
    console.log(error)
  });

  res.send("Hello World!");
});

app.post("/doorbell", (req, res) => {
  console.log(req);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

更新:

我实际上收到以下错误

0|express  |     at Module.load (node:internal/modules/cjs/loader:948:32)
0|express  |     at Function.Module._load (node:internal/modules/cjs/loader:789:14)
0|express  |     at Object.<anonymous> (/home/ubuntu/.nvm/versions/node/v15.1.0/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
0|express  |     at Module._compile (node:internal/modules/cjs/loader:1083:30)
0|express  |     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
0|express  |     at Module.load (node:internal/modules/cjs/loader:948:32)
0|express  |     at Function.Module._load (node:internal/modules/cjs/loader:789:14)
0|express  | (node:13300) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 open listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit
0|express  | (Use `node --trace-warnings ...` to show where the warning was created)
0|express  | (node:13300) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit
0|express  | (node:13300) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit
0|express  | (node:13392) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 open listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit
0|express  | (Use `node --trace-warnings ...` to show where the warning was created)
0|express  | (node:13392) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit
0|express  | (node:13392) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [WebSocket]. Use emitter.setMaxListeners() to increase limit

更新我也尝试添加以下内容

var EventEmitter = require('events');


const ee = new EventEmitter()
ee.setMaxListeners(0);

仍然收到 eventEmitter 错误

更新:

因此,如果我将 ws.on("open")... 从 app.get 中取出,它会起作用,我实际上想放入帖子中,我会在帖子中收到相同的错误吗?我想我会测试一下,但是为什么我不能把它放在 apt.get 中

更新: 我尝试输入 post 请求,但仍然收到事件发射器错误。

【问题讨论】:

    标签: node.js amazon-web-services express amazon-ec2 websocket


    【解决方案1】:

    我从 ws github 问题中得到了答复,所以我将其发布给其他人

    app.post('/doorbell', (req, res) => {
      var hmm1 = { action: 'sendmessage', data: 'hello world from post request' };
    
      if (ws.readyState === WebSocket.OPEN) {
        ws.send(JSON.stringify(hmm1));
        res.send('heya hey');
      } else {
        res.send('The WebSocket connection is not open');
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2012-02-23
      • 2011-11-30
      • 1970-01-01
      • 2020-10-30
      • 2018-11-10
      相关资源
      最近更新 更多