我正在使用Node.js和ExpressJS编写服务器代码。
问题是当客户端发送POST请求告诉服务器使某些外部设备上移或下移时会出现这种情况。
我希望服务器向该POST请求发送初始响应,说明设备正在移动。当设备停止时,它会将该信息发送到服务器。然后我想改变响应的主体,因此它说设备已停止。
在对一个POST请求的一个响应的上下文中是否可以这样做?
现在我准备了一些我想要完成的模拟代码。 function setArray(chartType, data, cb){
cb("hello")
}
setArray('scatter', data, function(x){
console.log(x) // hello
});
函数模拟设备移动。超时结束'模拟'设备停止移动(即它一直向上移动)
function setArray(chartType, data, cb){
cb(data)
}
setArray('scatter', "Hello ", function(x){
setArray('scatter', "World!", function(y){
console.log(x + y)// Hello world!
})
});
我知道setTimeout
确实终止了服务器和客户端之间的连接。它被放置在那里只是为了更好地想象我想要完成的事情。我认为当天在ExpressJS中曾经有res.send("MOVING");
setTimeout(function () {
if (req.body.direction === "UP") {
res.send("OPENED");
} else {
res.send("CLOSED");
}
}, 1000);
,但在文档中没有提到它。我还发现了一个名为res.send()
的npm包,但我认为我不能对其进行参数化(取决于res.write()
值,第二个响应的值会有所不同)。
答案 0 :(得分:0)
据我所知,这超出了HTTP请求的范围。应该只有一个回复。
根据您的要求,我建议使用websockets。
https://socket.io/是受欢迎的选择之一。
简单来说,您将拥有一个websocket服务器以及您的expressJs服务器。从客户端,您将使用socketIo客户端发出事件。收到事件后,服务器将向目标套接字连接发回第一个事件(MOVING)。然后在超时后,它将发出另一个事件(OPENED或CLOSED)