带有确认的 Socketclustser 不工作
Socketclustser with acknowledgment not working
我尝试在 NodeJS 中使用带确认的 socketCluster。
我遵循此页面中的代码:
https://socketcluster.io/docs/basic-usage/
[服务器]发布到频道并等待确认
(async () => {
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
} catch (error) {
// ... Handle potential error if broker does not acknowledge before timeout.
}
})();
但我没有收到确认信息,我也不知道缺少什么。
我尝试使用此选项 {ackTimeout: 10000} 上传套接字集群服务器,但没有帮助。
我如何知道是否收到消息?
如果我的理解很好,你会得到一个ACK
await agServer.exchange.invokePublish('foo', 'This is some more data');
当你没有进入catch语句时执行。
agServer.exchange.invokePublish()
ACK 由 SocketCluster 在后台管理,您不必管理或读取它。
我的回答有用吗?
回复你最后的评论@Lior。
如果未收到 ACK,将执行“catch”块。
如何正确重试 = 我不知道。
我不是 SocketCluster 专家,但似乎没有自动机制来处理这个问题。
您可以在 try / catch 块周围放置一个“do / while”循环(通过防止无限循环):
let i = 0;
let callIsSuccessful = false;
do {
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
callIsSuccessful = true;
} catch (error) {
// ... Handle potential error if broker does not acknowledge before timeout.
}
} while (i++ < MAX_RETRIES && (!callIsSuccessful))
你也可以通过递归的方式调用发布动作的函数:
callingFunction(paramData, currentRetryNumber){
if(currentRetryNumber >= MAX_RETRIES){
return;
}
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
} catch (error) {
callingFunction(paramData, ++currentRetryNumber);
// ... Handle potential error if broker does not acknowledge before timeout.
}
}
(async () => {
callingFunction(paramData, 0);
})();
满意吗? ;)
我尝试在 NodeJS 中使用带确认的 socketCluster。
我遵循此页面中的代码: https://socketcluster.io/docs/basic-usage/
[服务器]发布到频道并等待确认
(async () => {
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
} catch (error) {
// ... Handle potential error if broker does not acknowledge before timeout.
}
})();
但我没有收到确认信息,我也不知道缺少什么。 我尝试使用此选项 {ackTimeout: 10000} 上传套接字集群服务器,但没有帮助。 我如何知道是否收到消息?
如果我的理解很好,你会得到一个ACK
await agServer.exchange.invokePublish('foo', 'This is some more data');
当你没有进入catch语句时执行。
agServer.exchange.invokePublish()
ACK 由 SocketCluster 在后台管理,您不必管理或读取它。 我的回答有用吗?
回复你最后的评论@Lior。 如果未收到 ACK,将执行“catch”块。 如何正确重试 = 我不知道。 我不是 SocketCluster 专家,但似乎没有自动机制来处理这个问题。 您可以在 try / catch 块周围放置一个“do / while”循环(通过防止无限循环):
let i = 0;
let callIsSuccessful = false;
do {
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
callIsSuccessful = true;
} catch (error) {
// ... Handle potential error if broker does not acknowledge before timeout.
}
} while (i++ < MAX_RETRIES && (!callIsSuccessful))
你也可以通过递归的方式调用发布动作的函数:
callingFunction(paramData, currentRetryNumber){
if(currentRetryNumber >= MAX_RETRIES){
return;
}
try {
// Publish data; wait for an acknowledgement from the back end broker (if it exists).
await agServer.exchange.invokePublish('foo', 'This is some more data');
} catch (error) {
callingFunction(paramData, ++currentRetryNumber);
// ... Handle potential error if broker does not acknowledge before timeout.
}
}
(async () => {
callingFunction(paramData, 0);
})();
满意吗? ;)