当前位置:  开发笔记 > 编程语言 > 正文

PHP高性能 Server 框架 Swoole 发布 C 扩展版

PHP的高性能Server框架Swoole已发布C扩展版本

PHP的高性能Server框架Swoole已发布C扩展版本。



Swoole使用纯C编写,以PHP扩展的方式提供了一个强大的异步并行Server框架,特性如下:


  • 基于linux epoll+eventfd,不依赖libevent等第三方库,在Linux下可直接编译。
  • 支持3种模式Call、Writer和Worker。
  • 网络模块是完全异步非阻塞的,而且实现了读写分离,无锁设计。

运行模式

  • Call模式是在Reactor线程中直接回调,适用于IO很轻,逻辑简单的网络服务器
  • Writer模式是将数据投递给Writer线程,由Writer线程处理请求,Reactor线程继续处理新的网络请求。是call模式的加强版。这里使用了共享内存队列的设计,性能很好。
  • Worker模式是用类似Nginx的方式,采用了proxy+worker多进程的模式,将请求投递给Worker进程去处理,Worker进程处理完后再交由Writer线程写回客户端。这种方式比较适合业务比较重的场景。Swoole扩展提供了进程管理的功能,当worker进程异常结束时,父进程会fork出新的worker进程。

安装和编译

Swoole类似于node.js,但swoole内部是多线程的,只需要修改配置参数,即可调节线程、进程数量。Swoole使用简单方便,用户无须关心内部实现,只需要设置启动参数、编写PHP回调函数即可。


swoole扩展安装的方法和其他PHP扩展相同,使用phpize来进行编译配置。只需要phpize、./configure、make && make install 三步即可完成编译安装。可以使用dl动态加载,也可修改php.ini配置自动加载。


环境依赖

  • OS: Only Linux version 2.6.22 or higher
  • PHP: version 5.2 or higher
  • require pthread epoll and eventfd
  • gcc: version 4.0 or higher

代码实例

Php代码
  1. $serv = swoole_server_create("127.0.0.1", 9500, 1); 
  2. swoole_server_set($serv, array
  3.     'timeout'=>2.5, 
  4.     'poll_thread_num'=>1, 
  5.     'writer_num'=>2, 
  6.     'worker_num'=>2, 
  7.     'backlog'=>128, 
  8.     'max_request' => 1000, 
  9. )); 
  10. function my_onStart($serv
  11.     echo "Server:start\n"
  12.  
  13. function my_onShutdown($serv
  14.     echo "Server:onShutdown(\n"
  15.  
  16. function my_onClose($serv,$fd,$from_id
  17.   echo "Client:Close. fd=$fd|from_id=$from_id\n"
  18.  
  19. function my_onConnect($serv,$fd,$from_id
  20.     echo "Client:Connect. fd=$fd|from_id=$from_id\n"
  21.  
  22. function my_onReceive($serv,$fd,$from_id,$data
  23.     echo "Client:Data. fd=$fd|from_id=$from_id|data=$data\n"
  24.     swoole_server_send($serv, $fd, "Server:$data"); 
  25.  
  26. swoole_server_handler($serv, 'onStart', 'my_onStart'); 
  27. swoole_server_handler($serv, 'onConnect', 'my_onConnect'); 
  28. swoole_server_handler($serv, 'onReceive', 'my_onReceive'); 
  29. swoole_server_handler($serv, 'onClose', 'my_onClose'); 
  30. swoole_server_handler($serv, 'onShutdown', 'my_onShutdown'); 
  31.  
  32. swoole_server_start($serv); 
  33. ?> 
2.5,
    'poll_thread_num'=>1,
    'writer_num'=>2,
    'worker_num'=>2,
    'backlog'=>128,
    'max_request' => 1000,
));
function my_onStart($serv)
{
    echo "Server:start\n";
}

function my_onShutdown($serv)
{
    echo "Server:onShutdown(\n";
}

function my_onClose($serv,$fd,$from_id)
{
  echo "Client:Close. fd=$fd|from_id=$from_id\n";
}

function my_onConnect($serv,$fd,$from_id)
{
    echo "Client:Connect. fd=$fd|from_id=$from_id\n";
}

function my_onReceive($serv,$fd,$from_id,$data)
{
    echo "Client:Data. fd=$fd|from_id=$from_id|data=$data\n";
    swoole_server_send($serv, $fd, "Server:$data");
}

swoole_server_handler($serv, 'onStart', 'my_onStart');
swoole_server_handler($serv, 'onConnect', 'my_onConnect');
swoole_server_handler($serv, 'onReceive', 'my_onReceive');
swoole_server_handler($serv, 'onClose', 'my_onClose');
swoole_server_handler($serv, 'onShutdown', 'my_onShutdown');

swoole_server_start($serv);
?>


Shell代码
  1. php server.php 
  2. telnet 127.0.0.1 9500 
  3. hello 
  4. server: hello 
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有