Skip to content

1,appnet网络通信扩展库简介

appnet edited this page Mar 20, 2018 · 2 revisions

appnet是一个基于linux epoll的多线程的高性能异步网络事件库,目标是用高性能的PHP版本搭载appnet快速构建强有力的长连接服务器,以弥补PHP固有的缺陷。appnet可广泛用于聊天系统,游戏服务器,消息通知服务器等实时通信场景。可对网络IO密集性场景或CPU密集性场景配置reactor数量和woker数量的比例,使硬件运行于最佳状态。

其特点有

  • 高性能,核心用纯C语言开发,epoll异步非阻塞事件通知机制,单线程可支撑10万并发连接
  • 易用性,使用方式简单,并提供PHP7.0版本扩展,简单几步就可塔建一个功能齐全的长连接服务器,不再需要nginx,apache,php-fpm等。
  • 高并发,多线程异步网络IO,Per Thread One Loop并发模型,多个worker进程并行处理业务。
  • 多协议,可混合TCP协议,websocket协议和简单http协议与服务器通信。
  • 内存优化,进程间通信使用共享内存,兼容jemalloc和tcmalloc内存优化技术。
  • 缓冲区优化,采用redis的动态缓冲区,根据数据包大小自动扩充,有效避免内存浪费和缓冲区溢出,其内存预分配策略降低了内存分配次数。从而提高内存分配效率。

appnet的http协议

单从做为webserver来说,appnet_php7扩展类似于一个nginx+php-fpm组合体,它既是一个web服务器,接收来自客户端的请求。也管理着PHP进程的执行。在appnet中,http协议只实现了简单的GET,POST请求,是做为一个辅助协议出现的。如果网站开发建议用nginx+fpm。appnet的http协议使用场景如:

  • 管理后台开发,管理后台可以通过http请求appnet服务器,直接调用相关逻辑来控制或获取玩家相关信息。如实时将玩家踢下线并通知给客户端等。
  • 为第三方提供http接口,比如充值回调,登录回调等,并实时通知客户端是否成功。

appnet的tcp协议

也就是大家常说的socket通信,这是appnet的核心,可以接收客户端的字符流和字节流数据,是二进制安全的。可以用来接收来自于C,C++,java,python等任何语言编写的客户端发送来的tcp消息包和发送消息给客户端,并保持长连接。使用场景如:

  • MMORPG游戏服务器
  • 实时聊天服务器
  • P2P,流媒体等流式传输场景。

appnet的websocket协议

websocket是专为html5提供的。可以通过javascript与appnet建议实时通信,可用于html5游戏或网站的实时推送系统,也可用来做web聊天系统。是替代ajax等轮循模式的不二之选。