【问题标题】:GWT Eventservice: how to detect client side timeout on server sideGWT Eventservice:如何在服务器端检测客户端超时
【发布时间】:2013-11-16 17:30:44
【问题描述】:

目前我正在为大学编写一个游戏项目,我们正在使用 GWT 和 GWT EventService。

一开始,客户进入主大厅。一个 Listener 和一个 UnlistenListener 将被注册到服务器。 UnlistenerListener 注册一个包含用户名的 UnlistenEvent。 “用户加入”被触发。

在服务器端,我们有一个所有活跃用户(“加入用户”)的列表。当用户关闭浏览器时,UnlistenEvent 将在 90 秒后触发。其他用户收到事件,但现在的问题是:我如何在服务器端处理这个超时?该事件将由 EventService 本身触发,并将被其他客户端接收,但我不知道如何捕捉这一时刻并在服务器端手动处理以将用户从“活动用户”列表中删除。当服务器检测到超时时,应触发诸如“用户离开”之类的事件。

活动用户列表保留在服务器端,所以我想要的只是有一个删除活动用户列表中“超时”用户的过程。

有人可以帮忙吗?

【问题讨论】:

  • GWT 事件仅适用于客户端。要通知服务器,您必须使用“超时”的用户对象进行 RPC 调用。在您的代码中的某处,您必须附加一个进行 RPC 调用的UnlistenEventHandler

标签: java events gwt timeout gwt-eventservice


【解决方案1】:

我可以从库文档/javadoc 中了解到,它是客户端之间的桥梁,并且不提供服务器端的监听。作为确认,javadoc 仅指客户端代码。

也许您可以修改库并向 EventRegistry 添加一个侦听器,它看起来是侦听事件流的好点。

【讨论】:

    【解决方案2】:

    我们现在有框架和 HTML5 websocket 供服务器将信息推送到客户端。

    我建议使用Atmosphere,或查看this thread 以获得更多选择。

    【讨论】:

      【解决方案3】:

      我这样解决了这个问题:

      EventRegistry er = EventRegistryFactory.getInstance().getEventRegistry();

      public MessagesRpcServiceImpl() {
          super();
      
          theUserManager = UserManagerFactory.getInstance().getUserManager();
          theUserManager.getUserActivityScheduler().addTimeoutListener(new UserTimeoutListener() {
      
              @Override
              public void onTimeout(UserInfo arg0) {
      
                  List<String> ids = new ArrayList<String>();
      
                  for (Domain d : er.getListenDomains()) {
                      ids.add(d.getName());
                  }
                  ids.remove("GLOBAL");
      
      
              }
          });
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 2019-05-13
        • 2012-11-14
        • 1970-01-01
        • 2011-03-22
        相关资源
        最近更新 更多