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