GWT Eventservice:如何检测服务器端的客户端超时

时间:2013-11-05 18:11:09

标签: java events gwt timeout gwt-eventservice

我正在为大学的游戏项目编码,我们正在使用GWT和GWT EventService。

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

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

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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我解决了这个问题:

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");


        }
    });
}

答案 2 :(得分:-1)

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

也许你可以修改这个库并为EventRegistry添加一个监听器,看起来很适合听事件流。