带有确认的 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);
})();

满意吗? ;)