zbus.NET网络通讯模块(一)

项目地址 https://git.oschina.net/rushmore/zbus

核心API就三个角色:

Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡

IoAdaptor -- 网络事件的处理,服务器与客户端共用,负责读写,消息分包组包等

Session -- 代表网络链接,可以读写消息

这三个角色大部分场景下,需要个性化处理的就只有IoAdaptor,也就是业务逻辑。

 

服务器、客户端工具,Server\Client等都是辅助上述三个核心角色而产生的。Http模块实现了HTTP协议的编解码与客户端,代码极少,整个zbus.NET ~ 50K,但是其功能很强大,扩展性灵活多变。(proxy模块就是例子,甚至整个zbus项目都是NET模块的应用)

 

1. 先热个身,写个服务器。不是Hello World,是具有生产高性能特性的服务器代码框架。

 

第一步,要做的事情很简单,你到底想做啥业务,直接切入主题,个性化一个IoAdaptor

为了能快速演示,并能通过浏览看到效果,我们实现一个HTTP服务,http://localhost/hello  调用返回hello.

 

MessageAdaptor是扩展了IoAdaptor,完成Http编解码的一个适配基础类。我们只需要在这个基础类之上衍生出一个业务应用即可。

public class MyServerAdaptor extends MessageAdaptor{ 
    public MyServerAdaptor(){  
        uri("/hello", new MessageProcessor() { 
            @Override
            public Message process(Message request) { 
            request.setBody("hello");
            return request;
            }
        });  
    } 
}

 

第二步,让这个IoAdaptor跑在zbus.NET引擎之上。

那么创建这个引擎(多个Server可共享一个引擎,所以设计上分离了)

final Dispatcher dispatcher = new Dispatcher();   

final Server server = new Server(dispatcher);

 

把第一步的IoAdaptor注册到这个引擎(Server控制)之上,可以方便侦听多端口(cool?)

IoAdaptor ioAdaptor = new MyServerAdaptor();

server.registerAdaptor(80, ioAdaptor);

server.registerAdaptor(8080, ioAdaptor);

 

第三步,让我们把这个引擎(Server控制)跑起来

server.start(); 

 

这个时候你就可以通过浏览器直接访问了,当然也可以通过Client访问。

Simple?压力测试看看吧,一般i7box可以上5w+QPS

不妨先看看源码吧,

示例全部源码(可进入zbus项目test目录下玩更多示例)
package org.zbus.net;

import org.zbus.net.core.Dispatcher;
import org.zbus.net.core.IoAdaptor;
import org.zbus.net.http.Message;
import org.zbus.net.http.Message.MessageProcessor;
import org.zbus.net.http.MessageAdaptor;


public class MyServerAdaptor extends MessageAdaptor{ 
	public MyServerAdaptor(){  
		uri("/hello", new MessageProcessor() { 
			@Override
			public Message process(Message request) { 
				request.setBody("hello");
				return request;
			}
		});  
	} 

	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {   
		final Dispatcher dispatcher = new Dispatcher();   
		final Server server = new Server(dispatcher);
		
		//相同的业务处理逻辑可以便捷的侦听多个地址
		IoAdaptor ioAdaptor = new MyServerAdaptor();
		server.registerAdaptor(80, ioAdaptor);
		server.registerAdaptor(8080, ioAdaptor);
		
    	server.start(); 
	}
}



你可能感兴趣的:(zbus.NET网络通讯模块(一))