其实超出浏览器,PHP仍有用武之地,Linux上PHP通过pcntl、posix、sysvshm、sysvmsg、libevent、 swoole等PECL扩展支持,用纯PHP就可以编写不依赖Nginx/Apache的高性能Socket应用服务器(独立控制进程,以守护进程运行)
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
swoole.use_shortname='off'
通过php -m来查看是否成功加载了swoole.so,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径
安装ext-async扩展:https://github.com/swoole/ext-async/releases 下载版本号必须跟swoole一致
tar –xzf ext-async-4.4.16.tar.gz
cd ext-async-4.4.16
./configure
make
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);
安装Hyperf
1》安装hyperf:通过composer来安装composer create-project hyperf/hyperf-skeleton;
2》因为hyperf是依赖composer的,所以安装完需要在对应的项目目录composer install,安装composer的依赖包,不然无法启动;
3》启动服务:php bin/hyperf.php start,服务启动之后当修改代码并不会自动重新启动服务,需要手动重启;
4》然后访问,hyperf默认访问的是index首页;http://localhost:9501/或者另开一个命令窗口,执行:curl 127.0.0.1:9501,返回如下图所示:
hyperf是CLI运行的,每次修改了代码后需要手动ctrl+c结束后重新运行
这里官方也给出了解决方案:安装一个热重启/热重载的组件(Watcher提供了文件修改后立马重启的功能,适用于开发环境提供便利)
composer require hyperf/watcher --dev
发布配置
php bin/hyperf.php vendor:publish hyperf/watcher
将原来正在运行的项目 ctrl+c 给结束掉进程。在项目的根目录运行
#php bin/hyperf.php start 废弃
php bin/hyperf.php server:watch
这个时候就会重新运行起来
这边可以看hyperf的官网:hyperf官网链接