游戏服务器中使用Netty进行Http请求管理

游戏服务器中使用Netty进行Http请求管理

背景

作为游戏服务器,无法避免与第三方系统交互。例如:登陆、充值、中台等,这些平台很多都是Web平台,提供http服务接口。这就需要游戏具备http访问功能。

解决方案

Netty实现异步http调用。

原因:

效率:netty的多路复用技术,实现的异步http可以用很少的几个线程实现同时成百上千个http请求。

记录

  • 准备
    • 初始化EventLoopGroup,设置线程数
    • 初始化Bootstrap
    • 初始化SslContext,支持SSL
  • 请求:get和post
    • 通过URI解析url,获得port
    • 创建get请求
      • 构造QueryStringEncoder,作为http参数
      • 构造DefaultFullHttpRequest,设置http版本和get方式
      • header设置connect=close
    • 创建post请求
      • 构造DefaultFullHttpRequest,设置http版本和post方式
      • header设置connect=close
      • 构造HttpPostRequestEncoder,添加post参数
    • 构造HttpRequest完成
  • 复制基础Bootstrap#clone,并继续构造请求参数
  • ChannelInitializer初始化,使用了netty提供的几个Handler:HttpClientCodec、HttpObjectAggregator
  • 发起HTTP的connnect请求
  • 在Connect的future事件监听,发送HttpRequest请求数据
  • 返回数据,同步主线程
    • HTTPResponse是在Netty的EventLoopGroup线程
    • HttpClientAsyncCallback通过给主线程Port#addTask实现数据同步
    • 返回可以序列化的数据结构AsyncHttpResult

注意事项

  • 可以通过EventLoopGroup#schedule处理请求超时事件
  • Handler#exceptionCaught的异常处理

你可能感兴趣的:(游戏技术与架构研究,服务器,游戏,http)