Swoole是一个面向生产环境的 PHP 异步网络通信引擎。使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
安装文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
首先按照Swoole官网说明安装swoole扩展,然后安装think-swoole扩展。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
composer require topthink/think-swoole=2.0.*使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
Swoole目前不支持Windows文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
使用Swoole作为HttpServer文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
命令行下启动服务端(需要2.0+版本think-swoole扩展)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
直接在命令行下启动服务端。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
启动完成后,会在0.0.0.0:9501启动一个HTTP Server,可以直接访问当前的应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
swoole的参数可以在应用配置目录下的swoole.php里面配置(具体参考配置文件内容)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
如果需要使用守护进程方式运行,可以使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole -d文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
或者在swoole.php文件中设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'daemonize' => true文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
注意:由于onWorkerStart运行的时候没有HTTP_HOST,因此最好在应用配置文件中设置app_host文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
支持的操作包括文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole [start|stop|reload|restart]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
由于onWorkerStart运行的时候没有HTTP_HOST,因此最好在应用配置文件中设置app_host参数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
启动后,可以使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
http://127.0.0.1:9501文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
访问你的应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
如果需要配置地址和端口,可以在应用配置目录下增加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
swoole.php配置文件,然后设置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
- <?phpreturn [
- 'host' => 'tp5.com',
- 'port' => 9508,];
可以支持Swoole自身的配置参数设置,例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
- <?phpreturn [
- 'host' => 'tp5.com',
- 'port' => 9508,
- 'worker_num' => 4,
- 'max_request' => 1000,];
扩展中定义了onWorkerStart和onRequest事件回调方法(如果不熟悉请不要随意替换),如果你需要自定义swoole的事件回调方法,可以在配置文件中使用闭包定义。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
- <?phpreturn [
- 'host' => 'tp5.com',
- 'port' => 9508,
- 'worker_num' => 4,
- 'max_request' => 1000,
- 'WorkerStop' => function($server, $worker_id){
- // 添加你的代码
- },];
或者直接在配置文件中添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
使用Swoole作为Server服务端文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
可以支持直接启动一个Swoole server(需要2.0.9+版本)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole:server文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
会在0.0.0.0:9508启动一个Websocket服务。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
如果需要自定义参数,可以在config/swoole_server.php中进行配置,包括:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
配置参数 描述文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
type 服务类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
host 监听地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
port 监听端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
mode 运行模式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
socket Socket type文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
并且支持swoole所有的参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
也支持使用闭包方式定义相关事件回调。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
return [文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
// 扩展自身配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'host' => '0.0.0.0', // 监听地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'port' => 9501, // 监听端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'type' => 'socket', // 服务类型 支持 socket http server文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'mode' => SWOOLE_PROCESS,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'socket_type' => SWOOLE_SOCK_TCP,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
// 可以支持swoole的所有配置参数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'daemonize' => false,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
// 事件回调定义文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'onOpen' => function ($server, $request) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
echo "server: handshake success with fd{$request->fd}\n";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
},文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'onMessage' => function ($server, $frame) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
$server->push($frame->fd, "this is server");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
},文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'onRequest' => function ($request, $response) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
$response->end("<h1>Hello Swoole. #" . rand(1000, 9999) . "</h1>");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
},文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'onClose' => function ($ser, $fd) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
echo "client {$fd} closed\n";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
},];文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
也可以使用自定义的服务类文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
<?php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
namespace app\http;use think\swoole\Server;class Swoole extends Server{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
protected $host = '127.0.0.1';文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
protected $port = 9502;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
protected $option = [文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'worker_num'=> 4,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'daemonize' => true,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'backlog' => 128文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
];文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
public function onReceive($server, $fd, $from_id, $data)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
$server->send($fd, 'Swoole: '.$data);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
}}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
支持swoole所有的回调方法定义(回调方法必须是public类型)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
serverType 属性定义为 socket或者http 则支持swoole的swoole_websocket_server和swoole_http_server文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
然后在swoole_server.php中增加配置参数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
return [文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
'swoole_class' => 'app\http\Swoole',];文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
定义该参数后,其它配置参数均不再有效。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
在命令行启动服务端文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole:server文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
支持reload|restart|stop|status 操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html
php think swoole:server reload文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/24496.html