xsocket:空閒超時問題。

XSocket是什麼? java的nio的封裝。html

詳情:java

1. http://xsocket.sourceforge.net/core/apidocs/2_1/index.htmlapi

2. http://xsocket.orgsocket

 

開發中要解決的實際問題:若是客戶端必定時間內沒有操做,則踢客戶端下線。函數

 


/** * @author 9082046**@qq.com * */ 方案1、 在啓動時設置: IServer srv = new Server(Port, IHandler); srv.setConnectionTimeoutMillis(Time_1_ms);// 設置最大鏈接時間。 srv.setIdleTimeoutMillis(Time_2_ms);// 設置最大空閒時間。 方案2、 在接受到鏈接時 和 在接受到數據時設置: public class XSocketHandler implements IDataHandler ,IConnectHandler ,IIdleTimeoutHandler ,IConnectionTimeoutHandler,IDisconnectHandler { public boolean onConnect(INonBlockingConnection nbc) throws IOException, BufferUnderflowException, MaxReadSizeExceededException {      nbc.setConnectionTimeoutMillis(Time_1_ms);// 爲何寫兩次、寫兩種函數? 目的: 一、舉例函數的用法。 二、配合onData() 必定程度上阻止惡意客戶端,若是在必定時間內通不過登陸驗證則會被超時處理。  nbc.setIdleTimeoutMillis(Time_2_ms); return true; } public boolean onDisconnect(INonBlockingConnection nbc) throws IOException { return false; } public boolean onData(INonBlockingConnection nbc) throws IOException, BufferUnderflowException, ClosedChannelException, MaxReadSizeExceededException {
      nbc.setConnectionTimeoutMillis(Time_1_ms);  
      nbc.setIdleTimeoutMillis(Time_2_ms);
return true; } public boolean onIdleTimeout(INonBlockingConnection nbc) throws IOException { return true; } public boolean onConnectionTimeout(INonBlockingConnection nbc) throws IOException { return true; } }

 

我的注:xsocket的最大空閒時間 和 我的原始理解存在差別,我的原始理解:從最後一次接收到client的數據開始計時, 實際XSocket的定義:從最後一次被使用開始計時,不管是接收到數據 或者 被用來發送數據spa

若是實際需求中是要求:從客戶端最後一次發送數據開始計時,則推薦 在XSocketHandler類中的 IHandler的實現化中使用 setConnectionTimeoutMillis() 方法。.net

反面舉例:世界聊天會使用socket發送數據影響 setIdleTimeoutMillis() 。htm

 

 

若有考慮不周,請指正,請輕噴。歡迎你們留言。blog

相關文章
相關標籤/搜索