2011-10-18 74 views
2

即時通訊新的碼頭,我嘗試開發一個小應用程序,使用不同的servlet。其中一個servlet是一個WebSocketServlet。現在我試圖構建一個認證機制,我的基本思想是使用jetty的默認HttpSession實現,它可以通過HttpServletRequest.getSession()來訪問;碼頭8 WebSocket和會話超時

因此,可以說,我想創建一個小的聊天應用程序(我只是在談論服務器端),並讓說,只有兩個 的servlet:

  • 用於接收和轉發聊天消息的WebSocketServlet給位於同一個聊天室的其他用戶。這裏有URL/servlets/chat
  • 另外,還有第二個叫做AvatarServlet的「正常」HttpServlet。這個servlet的功能非常簡單:該servlet處理HTTP POST事件,以允許當前用戶上傳和更改他自己的頭像個人資料圖片。網址是/ servlet的/化身

所以化身的servlet只處理HTTP POST如果用戶登錄,這對我意味着,用戶有一個有效的HttpSession(當然相同的HttpSession作爲聊天小服務程序)。

我的問題: 可以說用戶通過聊天servlet聊天1小時,並決定在這個小時後通過我的頭像servlet更改他的頭像圖片。由於即時通訊使用websockets,因此不會重新加載頁面,並且僅在開始時(1小時前)調用聊天servlet才能建立websocket連接。

所以我想,即使用戶一直在線和活躍,會話將過期,當用戶嘗試使用頭像servlet(1小時後)。

我的假設是否正確?有沒有人有這方面的經驗或知道更好的解決方案?

謝謝

回答

1

您可以發送一個Ajax請求沒有包含任何內容,但會話ID,從而基本上「倒是」會話每隔x分鐘。這樣,只要用戶打開聊天窗口,會話就保持活動狀態。當聊天窗口關閉時,會話超時。

+0

通常這種方法被稱爲保持活力的「心臟跳動」,可能會有所幫助,如果你需要尋找一種實現方式:) – Skuld

+0

謝謝,這是我應該考慮的一個選項。 否則,我可以將Session過期超時設置爲無窮大。另外WebSocket需要不時地向服務器發送保持活動的消息,否則WebSocket連接將被關閉。但我還沒搞清楚,如果這個WebSocket通信影響了Session對象(更新/更新/擴展)...... – sockeqwe