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

    xiaoxiao2021-03-26  12

    引入

    小贤贤

    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

    今天先写到这里。。

    转载请注明原文地址: https://ju.6miu.com/read-600221.html

    最新回复(0)