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

来源:互联网 发布:人工智能行业入门 编辑:程序博客网 时间:2024/06/14 07:56

引入

小贤贤

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.0sudo apt-get install php-devsudo apt-get install php-pearsudo pecl install swoole# 定位 php.ini => # find / -name php.ini# 或者 phpinfo() 中找 load_configuration_file() 对应的内容# vi /etc/php/php.iniextension=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 gitgit clone https://github.com/swoole/framework.gitsudo apt-get install mysql-server mysql-clientsudo apt-get install php7.0-mysqlsudo 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

今天先写到这里。。

0 0
原创粉丝点击