Skip to content

ls0113/Hsn

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Hsn

A simple nio server framework.

####设计概要 1. IO模型采用JDK NIO

2. 具备多线程单机扩容能力
		通过配置可尽可能的提高资源使用率.

3. 基于多Selector Reactor模式
		Accept  Selector 1
		Channel Selector *	
		
4. 基于池化本地缓冲区
		所有缓冲区均为高效的本地缓冲区,并实现基于内存池的缓冲区重用机制.
		
5. 基于无锁化的串行设计理念
		尽可能的避免锁竞争带来的性能损耗.
		通过串行化设计,同一连接的业务处理始终仅在同一个线程内完成,避免了多线程竞争和同步锁.

####相较于Netty Mina

  • 代码更简洁, 仅40KB左右.

  • 更大的自定义扩展空间.

  • 对学习JDK NIO更具有学习意义.

  • 更快捷联系作者探讨相关问题(可忽略).

####Demo 参见: me.smoe.hsn.HelloHsn

Example: Echo server

Server code:
	public class HelloHsn {

		public static void main(String[] args) throws Exception {
			// 监听端口10080, 设置Backlog值为200
			HsnServer server = new HsnServer(10080, 200);
			
			// 设置用于处理连接相关操作的Selector数量(默认同CPU核心数量)
			server.setChannelSelectorCount(2);
			
			// 设置用于处理连接相关操作的线程数量(默认为ChannelSelectorCount的两倍)
			server.setChannelThreadCount(4);
	
			// 设置缓冲区对象池大小(默认1024)
			server.setBufferPoolSize(1024);
			// 设置缓冲区默认容量(默认1024)
			server.setBufferSize(1024);
	
			// 设置Channel适配器
			server.setChannelAdaptor(EchoChannelAdaptor.class);
			
			// 启动Hsn
			server.start();
		}
	}
	
ChannelAdaptor code:
	public class EchoChannelAdaptor extends StandardChannelAdaptor {

		@Override
		public void onMessage(ChannelContext channelContext) {
			channelContext.write(Charset.forName("UTF-8").decode(channelContext.read()).toString().getBytes());
			
			channelContext.close();
		}
	}

####Jmeter测试数据 测试环境: Dell E5400、Win7、I5-4210U 软件环境: 短连接、并发200、循环50次 image

About

🚀 A simple nio server framework.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%