FIRST TOUCH-20170308-Swoole+Nginx+Redis(慢慢补)

19 篇文章 0 订阅
9 篇文章 0 订阅

引入

小贤贤

Swoole之于PHP正如Node.js之于JavaScript.

韩天峰

PHP的确有很多局限性,比如Unix系统编程、网络通信编程、异步io,Swoole开源项目就是为了弥补PHP在这些方面的缺陷诞生的。Swoole实际上是一个网络通信和异步io的引擎,一个基础库。PHPer可以基于swoole去实现过去PHP无法实现的功能。

Swoole到底是个什么东西?

More

为什么选择swoole?

与Golang/Node.js/Erlang/php+libevent比较,swoole是整体方案。从性能、异步、并行、可维护性、开发效率方面综合考虑的。swoole中你可以同步,也可以异步。代码中可以有阻塞,通过多开进程来调整处理能力。

swoole与phpdaemon/reactphp/workerman等纯PHP网络库的差异

通过压测也能发现,纯C的swoole写一个EchoServer,做-c 500 -n 100000的测试中,CPU始终在5%-10%之间。而PHP实现的PSF网络Server框架,CPU占用率高达70%-90%。

Start

Swoole 教程

swoole目前已被多家移动互联网、物联网、网络游戏、手机游戏企业使用,替代了C++、Java等复杂编程语言来实现网络服务器程序。 使用PHP+Swoole,开发效率可以大大提升。官方提供了基于swoole扩展开发的PHP网络框架, 支持Http,FastCGI,WebSocket,FTP,SMTP,RPC等网络协议 swoole在美国,英国,法国,印度等国家都有用户分布,在国内的 腾讯、百度、阿里巴巴、YY语音等多家知名互联网公司均有使用。

Swoole Open Source Project

GitBook: Easy Swoole

安装-为PHP添加swoole异步并行扩展 - lianche

sudo apt-get install php7.0
sudo apt-get install php-dev
sudo apt-get install php-pear
sudo pecl install swoole

# 定位 php.ini => 
# find / -name php.ini
# 或者 phpinfo() 中找 load_configuration_file() 对应的内容
# vi /etc/php/php.ini
extension=swoole.so
# client-server 模式
# 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 "Receive: $data\n";
    });
    $client->on("error", function($cli){
        echo "connect fail\n";
    });
    $client->on("close", function($cli){
        echo "close\n";
    });
    $client->connect('127.0.0.1', 9501, 0.5);
?>

# server
<?php
    $serv = new swoole_server("0.0.0.0", 9501);
    $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->on('close', function ($serv, $fd) {
        echo "Client: Close.\n";
    });
    $serv->start();
?>


# 永久定时,循环定时
<?php
    $str = "Say ";
    $timer_id = swoole_timer_tick( 1000 , function($timer_id , $params) use ($str) {
        echo $str . $params;  // 输出“Say Hello”
    } , "Hello" );
?>

# 临时定时,一次结束
<?php
    class Test
    {
        private $str = "Say Hello";
        public function onAfter()
        {
            echo $this->str; // 输出”Say Hello“
        }
    }
    $test = new Test();
    swoole_timer_after(1000, array($test, "onAfter"); // 成员变量
    swoole_timer_after(2000, function() use($test){ // 闭包
        $test->onAfter(); // 输出”Say Hello“
    });
?>
sudo apt-get install git
git clone https://github.com/swoole/framework.git
sudo apt-get install mysql-server mysql-client
sudo apt-get install php7.0-mysql
sudo apt-get install nginx

Ubuntu/CentOS 系统上安装与配置Nginx
1. 服务地址:/etc/init.d/nginx 
2. 配置地址:/etc/nginx/  如:/etc/nginx/nginx.conf
3. Web默认目录:/usr/share/nginx/http/  如:usr/share/nginx/index.html
4. 日志目录:/var/log/nginx/  如:/var/log/nginx/access.log
5. 主程序文件:/usr/sbin/nginx

php index.php 运行正常,而在 web 环境下直接访问该网址时,出现 nginx 不解析 php 文件,而是直接下载 php 文件的情况。

测试 nginx.conf nginx -t -c /etc/nginx/nginx.conf,出现报错:

2017/03/07 22:29:59 [emerg] 87843#87843: "fastcgi_pass" directive is duplicate in /etc/nginx/sites-enabled/default:57

解决方案:
解决安装nginx 日志文件出现”fastcgi_pass” directive is duplicate 错误

修改 /etc/nginx/sites-available/default,如下:(中间绕了好大的坑–兜兜转转,最后终于知道–文档有多坑。。好端端的项目,为什么文档为什么写成这样?!)

server {
    listen  80;
    server_name _;
    root  /var/www/html/test/static;

    location / {
        if (!-e $request_filename){
            proxy_pass http://127.0.0.1:9501;
        }
    }
}

就是这个地方==。。神坑!是官方改 app_server.php 文件位置了,还是我的理解问题。有毒!

php /var/www/html/test/examples/app_server.php start -d

今天先写到这里。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值