Skip to content

zenithght/appnet_php7

 
 

Repository files navigation

# appnet介绍

appnet是一个基于linux epoll的多线程的高性能异步网络事件库,目标是用高性能的PHP版本搭载appnet取代C/lua或C/python模式,快速构建强有力的长连接服务器,以弥补PHP固有的缺陷。使其可广泛用于聊天系统,游戏服务器,消息通知服务器等实时通信场景。可对网络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的动态缓冲区,根据数据包大小自动扩充,有效避免内存浪费和缓冲区溢出,其内存预分配策略降低了内存分配次数。从而提高内存分配效率。


安装方法:
1,源码安装php_7.0.x
2,下载扩展到任意目录appnet_php7
3,执行如下指令:
 >cd appnet_php7
 >/usr/local/php7/bin/phpize
 >./configure --with-php-config=/usr/local/php7/bin/php-config
 >make
 >make install
 >php test/test.php
 >telnet 127.0.0.1 3011
 开始测试吧。

<?php

function onConnect( $server , $fd ) { $pid = posix_getpid(); echo "Client Connect:{$fd} pid={$pid} \n"; }

function onRecv( $server , $fd , $buffer ) { echo "Client Recv:[{$buffer}][{$fd}] \n"; $header = $server->getHeader(); $server->send( $fd , $buffer );

}; function onClose( $server , $fd ) { echo "Client Close:$fd \n"; }; //on worker run start,you can init env. function onStart( $server ) { $pid = posix_getpid(); echo "On Worker Start!! pid={$pid} \n"; //3000ms means 3second $server->timerAdd( 3000 , "onTimerCallback" , "paramsxxx" ); }; //on worker shutdown,you must save data in last time. function onFinal( $server ) { $pid = posix_getpid(); echo "On Worker Final!! pid={$pid} \n"; }; function onTimerCallback( $server , $timer_id , $params ) { $pid = posix_getpid(); echo "onTimerCallback ok,worker pid={$pid},timer_id={$timer_id}...\n";

</span><span style="color: #008000;">//</span><span style="color: #008000;">if do not remove it, it will be call this function forever    </span>
<span style="color: #800080;">$server</span>-&gt;timerRemove( <span style="color: #800080;">$timer_id</span><span style="color: #000000;"> );        

}
dl( "appnet.so"); $server = new appnetServer( "0.0.0.0" , 3011 ); $server->setOption( APPNET_OPT_WORKER_NUM , 1 ); $server->setOption( APPNET_OPT_REACTOR_NUM, 1 ); $server->setOption( APPNET_OPT_MAX_CONNECTION , 10000 ); $server->setOption( APPNET_OPT_PROTO_TYPE , APPNET_PROTO_MIX ); $info = $server->getInfo();

$server->addEventListener( APPNET_EVENT_CONNECT , "onConnect"); $server->addEventListener( APPNET_EVENT_RECV , "onRecv"); $server->addEventListener( APPNET_EVENT_CLOSE , "onClose"); $server->addEventListener( APPNET_EVENT_START , "onStart"); $server->addEventListener( APPNET_EVENT_FINAL , "onFinal");

$server->run();

?>

 

 更多介绍参见:https://github.com/lchb369/appnet_php7/wiki/appnet%E4%BB%8B%E7%BB%8D

 


QQ交流群:379084776

About

apple network & application network

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 93.9%
  • PHP 3.9%
  • HTML 1.3%
  • M4 0.9%