[英]GWT Eventservice: how to detect client side timeout on server side
我目前正在為大學的游戲項目進行編碼,我們正在使用GWT和GWT EventService。
在開始時,客戶進入主大廳。 偵聽器和UnlistenListener將被注冊到服務器。 UnlistenerListener注冊一個包含用戶名的UnlistenEvent。 觸發“用戶加入”。
在服務器端,我們列出了所有活動用戶(“加入的用戶”)。 當用戶關閉瀏覽器時,UnlistenEvent將在90秒后觸發。 其他用戶收到該事件,但是現在的問題是:如何在服務器端處理此超時? 該事件將由EventService本身觸發,並由其他客戶端接收,但是我不知道如何抓住這一時刻,並在服務器端手動進行處理,以將用戶從“活動用戶”列表中刪除。 服務器應在檢測到超時時觸發“用戶請假”之類的事件。
活動用戶列表保留在服務器端,因此我只想擁有一個刪除活動用戶列表中“超時”用戶的過程。
有人可以幫忙嗎?
現在,我們有了服務器的框架和HTML5 Websocket,可將信息推送到客戶端。
我建議使用Atmosphere ,或檢查此線程以獲取更多選擇。
我這樣解決了這個問題:
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");
}
});
}
從庫文檔/ javadoc可以理解,這是客戶端之間的橋梁,並且沒有在服務器端進行監聽。 作為確認,javadoc僅引用客戶端代碼。
也許您可以修改該庫並向EventRegistry添加一個偵聽器,這似乎是偵聽事件流的好地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.