// express server endpoint
app.get('/somethingcool', (req, res) => {
// assuming socket will be the client socket of the python server
socket.emit("do_something_i_will_wait", {/* data */}, withTimeout((response) => {
console.log("success!");
res.status(200).send(response);
}, () => {
console.log("timeout!");
res.status(500).send("python took to long to reply");
}, 5000));
});
// helper function for timeout functionality
const withTimeout = (onSuccess, onTimeout, timeout) => {
let called = false;
const timer = setTimeout(() => {
if (called) return;
called = true;
onTimeout();
}, timeout);
return (...args) => {
if (called) return;
called = true;
clearTimeout(timer);
onSuccess.apply(this, args);
}
}
应该没什么问题。请参阅socket.io文档中的Acknowledgments。他们甚至有一个超时的例子:
确认是如何工作的
所以我们从服务器向客户机发送一些简单的消息,作为最后一个参数,我们将放置一个函数——这将是我们的确认函数
在客户端,它看起来像这样。我们为事件侦听器“ferret”设置的回调包含两个参数,即从服务器传递到客户端的数据和确认函数
更简单的例子
我知道socket.io文档中的
withTimeout
示例可能有点难以理解,因此这里有一个不太复杂的示例,基本上也是这样:相关问题 更多 >
编程相关推荐