首頁  >  文章  >  後端開發  >  直擊Thinkphp中的Swoole

直擊Thinkphp中的Swoole

coldplay.xixi
coldplay.xixi轉載
2020-06-08 10:54:394390瀏覽


  

直擊Thinkphp中的Swoole

#Thinkphp中使用Swoole

#Swoole是一個以生產環境為導向的PHP 非同步網路通訊引擎。使 PHP 開發人員可以編寫高效能的非同步並發 TCP、UDP、Unix Socket、HTTP,WebSocket 服務。

安裝

先依照Swoole官網說明安裝swoole擴展,然後安裝think-swoole擴充。

composer require topthink/think-swoole=2.0.*使用

使用

Swoole目前不支援Windows

使用Swoole作為HttpServer

命令列下啟動服務端(需要2.0 版本think-swoole擴充)
直接在命令列下啟動服務端。

php think swoole

啟動完成後,會在0.0.0.0:9501啟動一個HTTP Server,可以直接存取目前的應用程式。

swoole的參數可以在套用設定目錄下的swoole.php裡面配置(具體參考設定檔內容)。

如果需要使用守護程序方式運行,可以使用

php think swoole -d

或在swoole.php檔案中設定

'daemonize' =>   true

注意:由於onWorkerStart運行的時候沒有HTTP_HOST,因此最好在應用程式設定檔中設定app_host

支援的操作包括

php think swoole [start|stop|reload|restart]

由於onWorkerStart運行的時候沒有HTTP_HOST,因此最好在應用程式設定檔中設定app_host參數

啟動後,可以使用

http://127.0.0.1:9501

來存取你的應用程式。

如果需要設定位址和端口,可以在應用程式設定目錄下增加
swoole.php設定文件,然後設定:

<?phpreturn [
    &#39;host&#39;  => &#39;tp5.com&#39;,
    &#39;port&#39;  =>   9508,];
可以支持Swoole自身的配置参数设置,例如:
<?phpreturn [
    &#39;host&#39;          => &#39;tp5.com&#39;,
    &#39;port&#39;          =>   9508,
    &#39;worker_num&#39;    =>   4,
    &#39;max_request&#39;   =>   1000,];

擴充功能中定義了onWorkerStart和onRequest事件回呼方法(如果你不熟悉請不要隨意替換),如果你需要自訂swoole的事件回調方法,可以在設定檔中使用閉包定義。

<?phpreturn [
    &#39;host&#39;          => &#39;tp5.com&#39;,
    &#39;port&#39;          =>   9508,
    &#39;worker_num&#39;    =>   4,
    &#39;max_request&#39;   =>   1000,
    &#39;WorkerStop&#39;    =>   function($server, $worker_id){
        // 添加你的代码
    },];

或直接在設定檔中加入

使用Swoole作為Server服務端

可以支援直接啟動一個Swoole server(需要2.0.9版本)

php think swoole:server

#會在0.0.0.0:9508啟動一個Websocket服務。

如果需要自訂參數,可以在config/swoole_server.php中進行配置,包括:

type#服務類型host監聽位址port監聽埠mode#執行模式socketSocket type
##配置參數
描述
並且支援swoole所有的參數。

也支援使用閉包方式定義相關事件回呼。

return [
    // 扩展自身配置
    &#39;host&#39;         => &#39;0.0.0.0&#39;, // 监听地址
    &#39;port&#39;         => 9501, // 监听端口
    &#39;type&#39;         => &#39;socket&#39;, // 服务类型 支持 socket http server
    &#39;mode&#39;         => SWOOLE_PROCESS,
    &#39;socket_type&#39;  => SWOOLE_SOCK_TCP,
 
    // 可以支持swoole的所有配置参数
    &#39;daemonize&#39;    => false,
 
    // 事件回调定义
    &#39;onOpen&#39;       => function ($server, $request) {
        echo "server: handshake success with fd{$request->fd}\n";
    },
 
    &#39;onMessage&#39;    => function ($server, $frame) {
        echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
        $server->push($frame->fd, "this is server");
    },
 
    &#39;onRequest&#39;    => function ($request, $response) {
        $response->end("<h1>Hello Swoole. #" . rand(1000, 9999) . "</h1>");
    },
 
    &#39;onClose&#39;      => function ($ser, $fd) {
        echo "client {$fd} closed\n";
    },];

也可以使用自訂的服務類別

<?php
namespace app\http;use think\swoole\Server;class Swoole extends Server{
    protected $host = &#39;127.0.0.1&#39;;
    protected $port = 9502;
    protected $option = [ 
        &#39;worker_num&#39;=> 4,
        &#39;daemonize&#39; => true,
        &#39;backlog&#39;   => 128
    ];
 
    public function onReceive($server, $fd, $from_id, $data)
    {
        $server->send($fd, &#39;Swoole: &#39;.$data);
    }}

支援swoole所有的回呼方法定義(回呼方法必須是public類型)

serverType 屬性定義為socket或http 則支援swoole的swoole_websocket_server和swoole_http_server

然後在swoole_server.php中增加配置參數:

return [
    &#39;swoole_class&#39;  =>   &#39;app\http\Swoole&#39;,];

定義該參數後,其它配置參數均不再有效。

在命令列啟動服務端

php think swoole:server

支援reload|restart|stop|status 操作

php think swoole:server reload

推薦教學:《

PHP影片教學

以上是直擊Thinkphp中的Swoole的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:liqingbo.cn。如有侵權,請聯絡admin@php.cn刪除