【问题标题】:How to send ws message from route request如何从路由请求发送ws消息
【发布时间】:2020-02-17 09:03:12
【问题描述】:

我一直在尝试创建一个使用电报机器人、快递服务器和反应应用程序的应用程序。因此,我需要从电报机器人创建一个 POST 请求来表达,而 express 将 POST 数据发送到 websocket 连接:

const express = require("express");
const app = express();
const expressWs = require("express-ws")(app);

// handles bot request
app.post("/request", (req, res) => {
  playlist.push(req.body.url);
  res.status(200).send({ message: "video is added to playlist" });
});

// after handling requst data must go here and send ws message to client side
app.ws("/echo", (ws, req) => {
  ws.on("message", msg => {
  ws.send(`msg is = ${msg}`);
  });
});

我做对了吗,如果是,如何在 app.post 路由处理请求后调用 ws.send?

【问题讨论】:

  • 可能有多个客户端连接到/echo 端点,这与您的/request 端点无关。如果您尝试做的是将发布请求的内容广播到连接的客户端,那么您将必须监视对发布端点的请求并将该请求发送到这些客户端。您可以改用 ws 包。

标签: javascript node.js express websocket


【解决方案1】:

根据我对您问题的了解,这是您的代码的更新版本,它完全符合您的要求。

我用ws 替换了express-ws 包,因为这足以满足您的用例。

express 服务器在 8080 端口上运行,而 websocket 服务器在 8081 端口上运行,因为它们是不同的协议,不会在同一个端口上运行(你可以让它工作,但我不推荐它See this question

const express = require("express");
const Websocket = require('ws');
const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

const wss = new Websocket.Server({ port: 8081 });

wss.on('connection', (ws) => {
  console.log('One client connected');
  ws.on("message", msg => {
    ws.send(`msg is = ${msg}`);
  });
})

// handles bot request
app.post("/request", (req, res) => {
  // Broadcast URL to connected ws clients
  wss.clients.forEach((client) => {
    // Check that connect are open and still alive to avoid socket error
    if (client.readyState === Websocket.OPEN) {
      client.send(url);
    }
  });

  res.status(200).send({ message: "video is added to playlist" });
});


app.listen(8080, () => {
  console.log('Express listening on 8080');
  console.log('Websocket on 8081');
});

使用 curl -d 'url=https://example.com/examplesong' localhost:8080/request 通过 curl 测试我有一个连接到 ws://localhost:8081 的客户端,一切看起来都不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多