javascript - 在返回响应之前,是否可以通过持久连接发送第二个请求。节点.js
问题描述
我知道这听起来很奇怪,但情况很奇怪。我一直在尝试在第一个响应之前向服务器发送第二个请求(通过同一连接)。我得到的是对第一个请求的响应,而第二个请求被服务器忽略。服务器保持连接活动:
server.on("connection", socket => {
socket.setTimeout(50 * 1000);
socket.on("timeout", () => {
console.log("socket timeout");
socket.end();
});
socket.on("close", hadError => {
console.log(
hadError
? "Socket closed due to ERROR during transmission"
: "Socket closed"
);
});
});
这是处理请求的路由:
app.post("/enddev", (req, res) => {
console.log("REQUEST TO ", req.route.path);
console.log("Req Header ", req.headers);
res.write("request\r\n");
setInterval(() => {
res.write("ack\r\n");
}, 2000);
});
我认为HTTP 协议不允许这样做,但可能有一些解决方法。
Websockets不是解决方案,因为客户端(不是浏览器)是嵌入式设备。
这是测试的图像(我使用 TCP 客户端程序来模拟来自客户端的请求消息):
右侧终端(黑色)是节点服务器。白色的是终端。终端上粉红色的是客户端发送的内容。黑色是来自服务器的响应。您可以看到服务器"request"
在标头之后立即发送消息。但是在第二次请求时没有出现任何响应。
解决方案
我想你从来没有打电话res.end()
。没有它,node.js 认为你的回应还没有结束。
推荐阅读
- python - 将 for 循环的每次迭代的输出保存在单个文件中
- reactjs - 打字稿将样式化的组件道具与父组件合并
- python - Python Pandas 转换日期
- discord.js - 为什么我的代码在不应该运行的时候运行?
- arrays - 替换 bash 中的文件/数组内容
- python - 为什么新创建的 virtualenv 包含 python ros 包?
- c# - .NET C# - 无法加载文件或程序集 [...] 或其依赖项之一。该系统找不到指定的文件
- react-native - 在 React Native 的 UI 管理器中找不到 RNSVGTSpan
- laravel - 观察员未填写该字段
- r - 如何在R中解决“二元运算符的非数字参数”?