Swoole PHP高性能编程

其实超出浏览器,PHP仍有用武之地,Linux上PHP通过pcntl、posix、sysvshm、sysvmsg、libevent、 swoole、proctitle等PECL扩展支持,用纯PHP就可以编写不依赖Nginx/Apache的高性能Socket应用服务器(独立控制进程,以守护进程运行)

Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的PHP5框架http://myleftstudio.com/

<?php

class ControllerBase extends Phalcon\Mvc\Controller
{
    protected function forward($uri)
    {
        //TODO 考虑这里是否可以接收url中的参数
        $uriParts = explode('/', $uri);
        return $this->dispatcher->forward(
            array(
                'controller' => $uriParts[0],
                'action' => $uriParts[1]
            )
        );
    }

    protected function redirect($uri = '', $param = array())
    {
        $url = new Phalcon\Mvc\Url();
        $uri .= !empty($param) ? '/?' . http_build_query($param) : '';
        header("location:" . $url->get($uri));
        die;
    }

    /**
     * 获取当前controller下的方法 数据
     * @return string
     */
    public function getActionInfo()
    {
        $action = '/' . $this->dispatcher->getControllerName() . '/' . $this->dispatcher->getActionName();
        return $this->session->get($action);
    }
}

Swoole PHP语言的异步、并行、高性能网络通信框架, 使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列, 毫秒定时器,异步文件读写,异步DNS查询。Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

cd swoole
phpize
./configure
make 
sudo make install

安装成功

编译安装成功后,修改php.ini加入

extension=swoole.so
通过 php -mphpinfo()来查看是否成功加载了swoole,

如果没有,可能是 php.ini的路径不对,可以使用 php -i |grep php.ini来定位到 php.ini的绝对路径。

TCP Server

<?php //server.php
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 8,   //工作进程数量
    'daemonize' => true, //是否作为守护进程
));
$serv->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();

TCP Client 

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
//设置事件回调函数
$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});
$client->on("receive", function($cli, $data){
    echo "Received: ".$data."\n";
});
$client->on("error", function($cli){
    echo "Connect failed\n";
});
$client->on("close", function($cli){
    echo "Connection close\n";
});
//发起网络连接
$client->connect('127.0.0.1', 9501, 0.5);

php命令行开启监听

php server.php  

 客户端访问

浏览器运行代码

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞
$client->connect('127.0.0.1', 9503, 0.5);////发起网络连接
$client->send("hello world\n");
$data = $client->recv(1024);
echo $data;
unset($client);

php+swoole目前的主要竞争对象是node.js,两者的使用场景差不多。php在web领域的庞大使用量,如果你的现有项目也是用php构建的,用swoole写后端服务的时候可以复用大量的现有模块,这对企业开发的一致性是很重要的,理论上讲只需要维护一套基础就行了

李丹阳  https://github.com/LinkedDestiny/swoole-doc

phpstorm-swoole-ide-helper 代码自动补全http://hudeyong926.iteye.com/admin/blogs/2285968

猜你喜欢

转载自hudeyong926.iteye.com/blog/2279137
今日推荐