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高手前来助阵。
转自 https://www.oschina.net/news/105487/smart-socket-1-3-25-released