2014-11-13 138 views
2

软件堆栈:大气WASYNC客户端(重新连接到关闭服务器)

  • 的Tomcat v7.0.54

  • 大气服务器V2.2.3(@ManagedService注解类)

  • 大气Wasync客户端v1.4.0

我们有两个服务器实例其中一个使用@ManagedService注释提供端点,另一个使用Wasync lib作为客户端连接到它。 服务器客户端需要连接在任何时候都是持久的,并且不同的用例使得这有点具有挑战性。

我们的主要问题用例有:

  1. 连接丢弃,因为网络中断或服务器已关闭。
  2. 客户端服务器已启动,但服务器端点尚未启动。

所以我们需要一种方法在这些情况下使客户端动态化。

IE:

  1. WebSocket的客户端连接到端点。
  2. 服务器停机维护。
  3. 客户端尝试每xx秒重新连接一次。
  4. 服务器开始正常备份。
  5. 在下次重新连接尝试时,客户端已连接。

首先,我们尝试使用内置在Wasync提供没有骰子重新连接选项:

OptionsBuilder<DefaultOptions, DefaultOptionsBuilder> optBuilder = wsAuthClient.newOptionsBuilder() 
     .reconnect(true) 
     .pauseBeforeReconnectInSeconds(10); 

监听器:

}).on(Event.REOPENED, new Function<String>() { 
     @Override 
     public void on(String t) { 
      logger.info("Re-opened connection to server."); 
     } 

基于我读过在文档中,当连接被@ManagedService特意关闭时,这会被触发吗?

有没有人遇到过这些类型的用例并且有解决方案?

回答

1

我已经通过在@ManagedService类端点中的方法上使用@Get或@Post注释来解决此问题。因此,我的客户端通过执行HTTP请求来轮询该端点,如果它返回200 OK,那么这意味着服务器已准备好接受连接。

SUDO:

while(!connected){ 
    //Do GET/POST to server to see if status is 200 OK. 
    if (request.status == 200){ 
     connected = true; 
     connectToWs(); 
    } 
    // otherwise delay and re-attempt request. 
} 
+0

弄来为什么'REOPENED'事件处理程序不会被调用?并且服务器还发送了客户端未收到的消息。 – manikanta

+0

@manikanta对不起,我很长一段时间没有在这个项目上工作过。我非常肯定,团队完全转向了不同的框架/解决方案。干杯! – proulxs

相关问题