smart-socket v1.3.25 釋出,企業級通訊框架
smart-socket是一款國產開源的Java AIO框架,追求程式碼量、效能、穩定性、介面設計各方面都達到極致。如果smart-socket對您有一絲幫助,請Star一下我們的專案並持續關注;如果您對smart-socket並不滿意,那請多一些耐心,smart-socket一直在努力變得更好。
背景
在阿里雲上部署了smart-socket服務,SLB會通過建立一次TCP連線來監測應用服務是否存活,之後立即斷開連結。此類心跳探測都會觸發AioSession的建立與銷燬,導致一些無意義的資源消耗。(感謝群友洋洋得意的反饋)
更新內容
- 網路監測器NetMonitor新增介面acceptMonitor用以決策是否接受此連線,被拒絕的連線會由框架自行關閉,降低無謂的資源開銷。
- 新增狀態機REJECT_ACCEPT,便於使用者感知到拒絕接受連線請求的事件。
- 在NetMonitor.acceptMonitort基礎上提供黑名單外掛功能,黑名單規則以介面的形式暴露給開發人員自行實現。此外掛支援且不僅限於IP層面的監控,並且服務執行期間可以動態調整黑名單規則。
外掛示例
public class IPBlackListPluginDemo { public static void main(String[] args) throws IOException { AbstractMessageProcessor processor = new AbstractMessageProcessor() { @Override public void process0(AioSession session, Object msg) { } @Override public void stateEvent0(AioSession session, StateMachineEnum stateMachineEnum, Throwable throwable) { switch (stateMachineEnum) { case REJECT_ACCEPT: System.out.println("連線被拒絕,session:" + session); break; case NEW_SESSION: System.out.println("建立連線,session:" + session); session.close(); default: System.out.println("狀態機:" + stateMachineEnum + " ,session:" + session); } } }; BlackListPlugin ipBlackListPlugin = new BlackListPlugin(); //註冊黑名單規則 ipBlackListPlugin.addRule(new BlackListPlugin.BlackListRule() { @Override public boolean access(InetSocketAddress address) { String ip = address.getAddress().getHostAddress(); return !"127.0.0.1".equals(ip); } }); processor.addPlugin(ipBlackListPlugin); AioQuickServer aioQuickServer = new AioQuickServer(8080, new NullProtocol(), processor); aioQuickServer.start(); } }
執行後可在控制檯分別輸入“curl 127.0.0.1:8080”、“curl 192.168.0.1:8080(本機區域網IP)”觀察效果,其中“127.0.0.1”的連線請求會被黑名單攔截並拒絕連線。
Maven
<dependency> <groupId>org.smartboot.socket</groupId> <artifactId>aio-core</artifactId> <version>1.3.25</version> </dependency>
專案分支:https://gitee.com/smartboot/smart-socket/tree/1.3.25/
Help!!!
感謝各位朋友一直以來對smart-socket的支援以及諸位大佬提供的寶貴意見,幫助smart-socket 1.3系列穩定運行於生產環境。然而作者水平其實一般,非要去開發1.4版本,現在遇到技術瓶頸,急需精通記憶體池調優演算法、網路通訊程式設計的Java高手前來助陣。