Okra通过封装成熟高效的框架以简化应用程序服务器构建的过程。上一篇介绍了使用Okra快速搭建Socket服务器。 本篇承接上一篇,介绍快速搭建简单高性能的Http服务器。

这里需要说明一下Okra框架不适用于web服务器。Okra的通信是基于Netty框架的,而Netty本身不提供强有力的web相关功能支持。 但是作为app或者是网页游戏的短连接服务器,Okra还是绰绰有余的。

1. 创建Executor

和Socket服务器搭建流程类似。首先实现一个简单的HttpRequestExecutor,用于处理Http请求:

public class HttpRequestExecutor implements Executor {private static final Logger LOG = LogManager.getLogger(HttpRequestExecutor.class);protected Session session;protected FullHttpRequest request;public HttpRequestExecutor(Session session, FullHttpRequest request) {this.session = session;this.request = request;}@Overridepublic void onExecute() {if (null == request) {throw new NullPointerException("request");}try {QueryStringDecoder decoder = new QueryStringDecoder(request.getUri());switch (decoder.path()) {case "/test":response(session.ctx(), "{state:0}");return;case "/favicon.ico":break;}simple(session.ctx().channel(), HttpResponseStatus.FORBIDDEN);} catch (Exception e) {session.ctx().close();LOG.info("HTTP Api throw exception : ", e);}}private static void simple(Channel channel, HttpResponseStatus status) {ChannelFuture channelFuture = channel.writeAndFlush(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, status));channelFuture.addListener(ChannelFutureListener.CLOSE);}private static void response(ChannelHandlerContext ctx, String msg) {HttpResponse response;if (msg != null) {ByteBuf byteBuf = Unpooled.wrappedBuffer(msg.getBytes());response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, byteBuf);} else {response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);}ChannelFuture channelFuture = ctx.channel().writeAndFlush(response);channelFuture.addListener(ChannelFutureListener.CLOSE);}@Overridepublic void release() {this.session = null;this.request = null;}
}

Okra提供了封装好的Disruptor桥用于Netty结合Disruptor。Okra通过Executor工厂让用户可以便捷灵活的定制特殊的处理者. 继承DisruptorAdapterBy41xHandler(依赖于Netty4.1.x)或者DisruptorAdapterHandler(依赖于Netty4.0.x)实现创建HttpRequestExecutor的Executor工厂。

public class ExampleApiHandler extends DisruptorAdapterBy41xHandler<FullHttpRequest> {@Overrideprotected Executor newExecutor(Session session, FullHttpRequest msg) {return new HttpRequestExecutor(session, msg);}
}

2. 创建Server

然后创建一个Server继承TcpProtocolServer实现自己的服务器类. 增加Handler处理

public class HttpServer extends TcpProtocolServer {public HttpServer(int port) {setPort(port);}@Overrideprotected ChannelHandler newChannelInitializer() {return new ChannelInitializer<NioSocketChannel>() {@Overrideprotected void initChannel(NioSocketChannel ch) throws Exception {ChannelPipeline cp = ch.pipeline();cp.addLast("decoder", new HttpRequestDecoder());cp.addLast("encoder", new HttpResponseEncoder());cp.addLast("aggregator", new HttpObjectAggregator(1048576));cp.addLast("handler", new ExampleApiHandler());}};}
}

3. 启动服务器

假如你的项目中使用了Spring框架,那么只需要在配置如下bean就可以启动:

<!-- Http protocol server -->
<bean id="httpServer" class="org.ogcs.okra.example.http.HttpServer" init-method="start" destroy-method="stop"><constructor-arg name="port" value="${http.port}"/>
</bean>

普通Java程序:

HttpServer server = new HttpServer(9005);
server.start();

只需要简短的两行代码就可以启动服务器了。

4. 总结

和搭建Socket服务器基本类似。更换了处理协议的Handler和处理并发任务的Executor。基本结构并无太大变更(感谢Netty框架,呦吼!) 本文介绍了使用Okra快速搭建高可用,高性能,可扩展,高并发服务器的示例。Okra通过封装,简化了服务器搭建过程。

转载于:https://my.oschina.net/u/1251807/blog/662213

Okra框架(三) 搭建HTTP服务器相关推荐

  1. Okra框架(二) 搭建Socket服务器

    本文将介绍使用Okra框架帮助开发者快速搭建高性能应用程序Socket服务端. 博主接触的网络游戏(包含但不限于网页, 手机)的服务端通信使用的协议基本上就Socket,Http或是WebSocket ...

  2. centos dns服务器_CentOS-6 实战三 搭建DNS服务器

    搭建环境: centos 6.10 搭建服务: DNS服务器 软件名称:bind 服务名称:named 搭建过程: 安装bind程序 修改配置参数 共4个 启动服务 客户机配置和测试 一.安装bind ...

  3. java搭建安卓服务器_无框架完整搭建安卓app及其服务端(一)

    技术背景: 我的一个项目做的的是图片处理,用 python 实现图片处理的核心功能后,想部署到安卓app中,但是对于一个对安卓和服务器都一知半解的小白来说要现学的东西太多了. 而实际上,我们的项目要求 ...

  4. 分布式服务器框架之搭建C#+MongoDB+Redis初步

    后面为了学习准备搭建一个分部署的游戏服务器,还有一套基于Unity的客户端轻量级框架.架构图后面补上,用CSDN记录一下自己的开发笔记. 游戏服务器主要分成了四个库(Dll).三个逻辑服务器.一个We ...

  5. 在IIS上搭建WebSocket服务器(三)

    在IIS上搭建WebSocket服务器(三) 原文:在IIS上搭建WebSocket服务器(三) 编写客户端代码 1.新建一个*.html文件. ws = new WebSocket('ws://19 ...

  6. 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...

    如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益 2020-06-23 19:42:21 6点赞 41收藏 5评论 小编注:此篇文章来自即可瓜分10万金币, ...

  7. k8s搭建部署--三个节点服务器(超详细)

    目录 k8s搭建部署--三个节点服务器 docker环境准备 安装kubeadm,kubelet和kubectl Centos添加kubernetes YUM软件源 ubuntu修改源 master主 ...

  8. 项目实战-物联网平台搭建-搭建websocket服务器(三)

    项目目前是有手机app 做客户端,通过app订阅主题并发送消息,mqtt服务器会将数据转存如mysql数据库中,然后再由ws服务端发送到前端展示 下边是大二写的一个mqtt通信app 客户端给温度主题 ...

  9. 服务器 搭建虚拟主机,server2016下搭建web服务器三种虚拟主机实验文档

    一.实验任务 网站家目录--路径 :c/inetpub/wwwroot 默认文档格式 : 查看默认文档,最常用index.html 更改文档要打开后缀显示 将唐诗网站加到自己的网站中运行 二. ...

最新文章

  1. TensorFlow优化器及用法
  2. appium的demo编程
  3. ASP.NET程序中常用的三十三种代码
  4. linux无显卡运行程序,Ubuntu中在应用程序菜单添加未显示的应用程序启动器
  5. 前端学习(2475):表单数据绑定处理
  6. 天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍
  7. 执行流程 | 你真的了解Spring AOP的执行顺序吗?
  8. c51转汇编语言窗口,在C51语言中如何嵌入汇编语言
  9. 阿里云开源镜像站下载最新Ubuntu和CentOS镜像
  10. Java代码TkMyBatis通用Mapper中新增数据时同时获取自增主键ID,与适用uuid 做主键时获取 id
  11. Atitit 身份证 证件编码规范
  12. spark读写Oracle、hive的艰辛之路(一)
  13. cocosbuilder3.0使用小记
  14. 20款优秀的基于浏览器的在线代码编辑器
  15. 【数据库】数据字典表
  16. 手机WIFI共享 打造便携式WIFI热点
  17. Android 开机加速优化
  18. 基于Qt ffmpeg opengl开发跨平台安卓实时投屏软件
  19. python如何print日语_Python,如何打印日文、韩文、中文字符串
  20. Activiti 从入门到精通

热门文章

  1. 计算机毕业设计Node.js+uniapp安卓在线民宿预定app(源码+程序+lw+远程调试)
  2. 王道计算机组成原理课代表 - 考研计算机 第五章 中央处理器 究极精华总结笔记
  3. git:remote: [session-f044bfa6] well: Incorrect username or password (access token)
  4. 公众号头条文章数据接口 API
  5. Unity 制作萌系live2d桌宠:屏幕自适应+交互
  6. ffmpeg在低版本VS中的编译
  7. 冰蝎3.0 页面存在,但是无法获取密钥
  8. html轮播图jquery,原生js和jquery实现图片轮播特效
  9. python爬取代理IP并进行有效的IP测试
  10. (FortiGate)飞塔防火墙过滤指定会话并清理