Skip to content

jinrenlab/appnet_php7

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# appnet介绍

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

其特点有
[1],高性能,纯C语言开发,epoll异步非阻塞事件通知机制.
[2],易用性,使用方式简单,并提供PHP7.0版本扩展。
[3],高并发,多线程网络IO,Per Thread One Loop并发模型,多个worker进程并行处理业务。
[4],多协议,可混合TCP协议,websocket协议和简单http协议与服务器通信。
[5],内存优化,进程间通信使用共享内存,兼容jemalloc和tcmalloc内存优化技术。
[6],缓冲区优化,自适应缓冲区,根据数据包大小自动增长缩小,避免内存浪费和缓冲区溢出
与其它网络库粗略比较
[1], 相比node.js单进程模式,appnet可充分利用多核CPU,不致于服务器资源浪费。
[2], 相比nginx多进程+fpm多进程,支持TCP协议,websocket协议等长连接。
[3], 相比libevent,原生支持多线程无需再次封装,支持混合协议。
[4], 相比memcache多线程+libevent模型,appnet支持多任务处理业务,具有更少的封装。
[5], 相比redis单进程网络模型,具体有更强的网络IO能力,appnet也就是redis网络层的增强版本

以上是一个美好的愿望,目前websocket协议和http协议尚未实现,还存已知的在进程终止时有可能会
内存泄露BUG,目前是一个人开发,也缺少更多的测试,希望有兴趣的同学一起参与进来测试,开发和提建议。
让PHP真正成为世界上最好的语言,没有之一。。

安装方法:
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
dl( "appnet.so");
$server = new appnetServer( "0.0.0.0" , 3011 );
$server->on('connect', function( $serv , $fd )
{
        $pid = posix_getpid();
        echo "Client:Connect:{$fd} pid={$pid} \n";
});

$server->on('receive', function( $serv , $fd , $buffer ) { echo "Client Recv:[{$buffer}][{$fd}] \n"; $header = $serv->getHeader(); if( $header['Protocol'] == "WEBSOCKET" ) { Websocket::onReceive( $serv , $fd, $buffer ); } });

$server->on( 'close' , function( $serv , $fd ) { echo "Client Close:$fd \n"; });

//on worker run start,you can init env. $server->on( 'start' , function( $serv ) { $pid = posix_getpid(); echo "On Worker Start!! pid={$pid} \n";

    </span><span style="color: #008000;">//</span><span style="color: #008000;">3000ms means 3second  </span>
    <span style="color: #800080;">$serv</span>-&gt;timerAdd( 3000 , "onTimerCallback" , "paramsxxx"<span style="color: #000000;"> );

});

//on worker shutdown,you must save data in last time. $server->on( 'final' , function( $serv ) { $pid = posix_getpid(); echo "On Worker Final!! pid={$pid} \n"; });

function onTimerCallback( $serv , $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;">$serv</span>-&gt;timerRemove( <span style="color: #800080;">$timer_id</span><span style="color: #000000;"> );

} $server->run();

?>

 

 


QQ交流群:379084776

About

apple network & application network

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 98.3%
  • PHP 1.7%