Max*_*pov 2 javascript websocket node.js express
我一直在尝试创建一个使用 telegram-bot、express 服务器和 React 应用程序的应用程序。因此,我需要从 telegram-bot 创建一个 POST 请求来发送给express,而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}`);
});
});
Run Code Online (Sandbox Code Playgroud)
我做得对吗?如果是,如何在处理 app.post 路由的请求后调用 ws.send ?
根据我对你的问题的理解,这是你的代码的更新版本,它完全符合你的要求。
我将express-ws软件包替换为ws因为这足以满足您的用例。
Express 服务器在端口 8080 上运行,而 websocket 服务器在端口 8081 上运行,因为它们是不同的协议,并且不会在同一端口上运行(您可以使其工作,但我不推荐它)请参阅此问题
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');
});
Run Code Online (Sandbox Code Playgroud)
通过curl 进行测试,curl -d 'url=https://example.com/examplesong' localhost:8080/request我连接了一个客户端ws://localhost:8081,一切看起来都很好。
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |