如何从路由请求发送WS消息

时间:2019-10-21 09:31:39

标签: javascript node.js express websocket

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

.then

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

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,这是代码的更新版本,完全可以满足您的要求。

我将express-ws包替换为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,一切看起来都很好。