Magician 1.1.16 发布,Handler配置改为注解式

207 阅读2分钟

Magician 从诞生的那天起,其定位就是一个网络编程包,他虽然属于应用层,但是又偏向于底层。在用户手里 一般是承担内核的角色,主要职责就是负责网络通信。

由于偏底层的特性,所以在使用的过程中 通常会出现这么一个问题,当我们创建好一个TCP服务之后

Magician.createTCPServer()
                    .handler("/", new DemoHandler())
                    .bind(8080);

如果需要增加handler,就不得不更改这部分代码,使其变成这样

Magician.createTCPServer()
                    .handler("/", new DemoHandler())
                    .handler("/test", new TestHandler())
                    .bind(8080);

如果需要websocket 又得改成这样

Magician.createTCPServer()
                    .handler("/", new DemoHandler())
                    .handler("/test", new TestHandler())
                    .webSocketHandler("/websocket", new DemoSocketHandler())
                    .bind(8080);

创建服务的步骤 和 创建handler的步骤 耦合的太紧,如果纯粹的使用这个项目 问题倒不大,但是如果把这个项目作为另一个项目的内核来使用,这个问题就会非常明显,因为这个场景下 创建服务的代码会单独封装掉,经常去改这个被封装掉的代码,会有一定的安全隐患。

所以在1.1.16中 我们解决了这个问题。

我们采用了注解来定义一个handler

在创建服务的时候,只需要指定一个扫描范围

Magician.createTCPServer()
                    .scan("handler所在的包名")// 指定扫描范围
                    .bind(8080);

这样如果需要新增handler 就不需要再动这块的代码了

比如新增一个TCPHandler

@TCPHandler(path="/")// 只需要加个注解即可
public class DemoHandler implements TCPBaseHandler<MagicianRequest> {

    @Override
    public void request(MagicianRequest magicianRequest) {
        // response data
        magicianRequest.getResponse()
                .sendJson(200, "{'status':'ok'}");
    }
}

新增一个WebSocketHandler

@WebSocketHandler(path = "/websocket")
public class DemoSocketHandler implements WebSocketBaseHandler {
   
    @Override
    public void onOpen(WebSocketSession webSocketSession) {
     
    }
   
    @Override
    public void onClose(WebSocketSession webSocketSession) {
        
    }

    @Override
    public void onMessage(String message, WebSocketSession webSocketSession) {

    }
}

这么做 就彻底的解耦了,创建服务就是纯粹的创建服务,创建handler就是纯粹的创建handler,两者之间没有很强的联系。

跟Magician一起升级的还有

Magician-Web组件,Martian组件。这两个组件的升级点,主要是配合Magician的改动而改动。而且给Martian带来了一个新特性:可以很方便的支持WebSocket了。

Magician的性能测试

TFB测试结果 达到了每秒可以完成15万次请求。

项目官网:magician-io.com


Magician IO,Magician开源项目的官方公众平台,会第一时间推送Magician的动态,同时也会不定期的发布业内资讯,技术文章等