皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

smart-socket v1.3.25 发布,企业级通信框架

smart-socket是一款国产开源的Java AIO框架,追求代码量、性能、稳定性、接口设计各方面都达到极致。如果smart-socket对您有一丝帮助,请Star一下我们的项目并持续关注;如果您对smart-socket并不满意,那请多一些耐心,smart-socket一直在努力变得更好。

背景

在阿里云上部署了smart-socket服务,SLB会通过建立一次TCP连接来监测应用服务是否存活,之后立即断开链接。此类心跳探测都会触发AioSession的创建与销毁,导致一些无意义的资源消耗。(感谢群友洋洋得意的反馈)

更新内容

  1. 网络监测器NetMonitor新增接口acceptMonitor用以决策是否接受此连接,被拒绝的连接会由框架自行关闭,降低无谓的资源开销。
  2. 新增状态机REJECT_ACCEPT,便于用户感知到拒绝接受连接请求的事件。
  3. 在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高手前来助阵。

转自 https://www.oschina.net/news/105487/smart-socket-1-3-25-released