Magician 大家可能比较陌生,在介绍本次更新前 先简单介绍一下吧:
Magician 是一套 web 开发的工具集,开发者可以自由选择自己想用的工具,可以选择只用一个小型的 http 服务包开发一个微型服务,也可以搭配 MVC 来实现一个常规的 web 服务,也可以只选择 JDBC 框架 对数据库进行操作,也可以全部一起用,实现一个完整的 web 服务,同时我们也会提供各种小型组件库,来方便开发者。
目前已经发布了三个包,分别是 Magician ,Magician-Web ,Magician-JDBC ,他们分别对应,小型 http 服务器,MVC 框架,数据库操作框架。
本次更新的部分在于第一个包 - Magician (Magician 既是这一套项目的名称,也是核心组件的名称):
Magician 是一个基于 Netty 的小型 HTTP 服务包,可以很方便的启动一个 HTTP 服务,支持 WebSocket ,采用注解来配置 Handler 。
如果你想用 netty 开发一个 http 服务,但发现它很麻烦,那么 Magician 可能会帮到你。
以前,我们启动一个 Magician 服务,只能用默认的配置,现在有这么几个配置项支持自定义了
MagicianConfig magicianConfig = new MagicianConfig();
magicianConfig.setNumberOfPorts(3); // 允许同时监听的端口数量,默认 1 个
magicianConfig.setBossThreads(1); // netty 的 boss 线程数量 默认 1 个
magicianConfig.setWorkThreads(3); // netty 的 work 线程数量 默认 3 个
magicianConfig.setNettyLogLevel(LogLevel.DEBUG); // netty 的日志打印级别
magicianConfig.setMaxInitialLineLength(4096); // http 解码器的构造参数 1 ,默认 4096 跟 netty 一样
magicianConfig.setMaxHeaderSize(8192); // http 解码器的构造参数 2 ,默认 8192 跟 netty 一样
magicianConfig.setMaxChunkSize(8192); // http 解码器的构造参数 3 ,默认 8192 跟 netty 一样
所有配置项都有默认值,所以在使用的时候 可以只选择自己需要更改的配置项进行设置,设置好了以后需要添加到 HttpServer 实例中
Magician.createHttp()
.scan("com.test")// 扫描范围(包名)
.setConfig(magicianConfig) // 添加配置
.bind(8080);
很简单,只需要调用 bind 方法多次即可
HttpServer httpServer = Magician.createHttp()
.scan("com.test")// 扫描范围(包名)
.setConfig(magicianConfig); // 添加配置
httpServer.bind(8080);
httpServer.bind(8081);
httpServer.bind(8082);
有时候可能会遇到这种需求,同一个项目中,有些资源是对内的,有些资源是对外的,我们想把这两部分资源隔离开来,这个时候可能就需要启动两个服务了。 在本次升级的时候,为了实现监听多端口,bind 已经变成异步的方法了,在调用 bind 以后,不会阻塞,而是可以继续往下执行,所以这个需求得到了完美的解决, 有两个实现方案。
监听两个端口,把对外和对内分开
直接启动两个服务,把端口,配置,线程全都分开
第一种方法,不用多说,相信大家都知道怎么做了,咱们重点说说第二种方法,跟监听多端口差不多的思路,只不过变成了启动两个服务,比如:
启动一个对外服务
// 将 8080 端口做为对外的端口,并且 scan 只扫描对外的资源(接口,handler 等)
HttpServer httpServer = Magician.createHttp()
.scan("com.test")// 只扫描对外的资源
.setConfig(magicianConfig); // 添加配置
httpServer.bind(8080);
启动一个对内服务
// 将 8081 端口做为对内的端口,并且 scan 只扫描对内的资源(接口,handler 等)
HttpServer httpServer = Magician.createHttp()
.scan("com.test")// 只扫描对内的资源
.setConfig(magicianConfig); // 添加配置
httpServer.bind(8081);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.