Heim >PHP-Framework >Denken Sie an PHP >thinkphp 6.0 swoole erweitert die Verwendung von WebSocket
Die folgende Tutorial-Kolumne des thinkphp-Frameworks stellt Ihnen das Tutorial zur erweiterten Websocket-Nutzung von thinkphp 6.0 vor (think-swoole). Ich hoffe, es wird Freunden in Not hilfreich sein!
thinkphp 6.0 swoole erweitertes Websocket-Nutzungs-Tutorial (think-swoole)
Die in diesem Artikel bereitgestellte Methode kann nicht mehr verwendet werden. /github.com/xavieryang007 /think-swoole-demo/blob/master/doc/%E6%96%87%E6%A1%A3/4.1-websocket.md
Das kommende tp6.0 war an swoole angepasst. Und think-swoole 3.0 wird gestartet und socketio ist standardmäßig angepasst. Die Verwendungsmethode unterscheidet sich geringfügig von Version 2.0.
Websocket erbt von Http. Vor der Verbindung mit Websocket ist eine HTTP-Anfrage erforderlich. Wenn die aktuelle Adresse Websocket unterstützt, wird 101 zurückgegeben und dann wird die Verbindung hergestellt. Mit anderen Worten: Nachdem mein Dienst WebSocket unterstützt, kann nicht jede angeforderte Verbindungsadresse mit WebSocket verbunden werden, sondern sie muss vorab angepasst werden, bevor eine Verbindung hergestellt werden kann.
Wenn Sie Websocket verwenden möchten, müssen Sie es in der Konfiguration aktivieren, „Enable“ unter „Websocket“ auf „true“ setzen.
In diesem Artikel wird hauptsächlich die Verwendung von Socketio vorgestellt. Es wird davon ausgegangen, dass jeder über ein gewisses Verständnis und eine gewisse Nutzungsgrundlage für Socketio verfügt.
socketIo fügt standardmäßig entsprechende Parameter nach der Anforderungsadresse hinzu
Gleichzeitig betrachtet socketio standardmäßig http://url/socket.io/ als eine Adresse, die Websocket-Dienste unterstützt.
Und die Adressanfrage wurde intern in tp-swoole3.0
'server' => [ 'host' => '0.0.0.0', // 监听地址 'port' => 808, // 监听端口 'mode' => SWOOLE_PROCESS, // 运行模式 默认为SWOOLE_PROCESS 'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP 'options' => [ 'pid_file' => runtime_path() . 'swoole.pid', 'log_file' => runtime_path() . 'swoole.log', 'daemonize' => false, // Normally this value should be 1~4 times larger according to your cpu cores. 'reactor_num' => swoole_cpu_num(), 'worker_num' => swoole_cpu_num(), 'task_worker_num' => 4,//swoole_cpu_num(), 'enable_static_handler' => true, 'document_root' => root_path('public'), 'package_max_length' => 20 * 1024 * 1024, 'buffer_output_size' => 10 * 1024 * 1024, 'socket_buffer_size' => 128 * 1024 * 1024, 'max_request' => 3000, 'send_yield' => true, ], ], 'websocket' => [ 'enabled' => true,// 开启websocket 'handler' => Handler::class, //自定义wbesocket绑定类 'parser' => Parser::class, //自定义解析类 'route_file' => base_path() . 'websocket.php', 'ping_interval' => 25000, 'ping_timeout' => 60000, 'room' => [ 'type' => TableRoom::class, 'room_rows' => 4096, 'room_size' => 2048, 'client_rows' => 8192, 'client_size' => 2048, ], ], 'auto_reload' => true, 'enable_coroutine' => true, 'resetters' => [], 'tables' => [],
TP6.0 verarbeitet, die Plug-in-Registrierung ist im Servicemodus registriert und die Routing-Registrierung kann im tp-swoole-Service eingesehen werden Informationen zur Registrierungsdatei. Sie können diese Route überschreiben, wenn Sie die Verknüpfungsregeln anpassen möchten.
<?php namespace think\swoole\websocket\socketio; use think\Config; use think\Cookie; use think\Request; class Controller { protected $transports = ['polling', 'websocket']; public function upgrade(Request $request, Config $config, Cookie $cookie) { if (!in_array($request->param('transport'), $this->transports)) { return json( [ 'code' => 0, 'message' => 'Transport unknown', ], 400 ); } if ($request->has('sid')) { $response = response('1:6'); } else { $sid = base64_encode(uniqid()); $payload = json_encode( [ 'sid' => $sid, 'upgrades' => ['websocket'], 'pingInterval' => $config->get('swoole.websocket.ping_interval'), 'pingTimeout' => $config->get('swoole.websocket.ping_timeout'), ] ); $cookie->set('io', $sid); $response = response('97:0' . $payload . '2:40'); } return $response->contentType('text/plain'); } public function reject(Request $request) { return json( [ 'code' => 3, 'message' => 'Bad request', ], 400 ); } }
Socketio verwendet standardmäßig die Demo
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: yunwuxin <448901948@qq.com> // +---------------------------------------------------------------------- namespace think\swoole; use Swoole\Http\Server as HttpServer; use Swoole\Websocket\Server as WebsocketServer; use think\App; use think\Route; use think\swoole\command\Server as ServerCommand; use think\swoole\facade\Server; use think\swoole\websocket\socketio\Controller; use think\swoole\websocket\socketio\Middleware; class Service extends \think\Service { protected $isWebsocket = false; /** * @var HttpServer | WebsocketServer */ protected static $server; public function register() { $this->isWebsocket = $this->app->config->get('swoole.websocket.enabled', false); $this->app->bind(Server::class, function () { if (is_null(static::$server)) { $this->createSwooleServer(); } return static::$server; }); $this->app->bind('swoole.server', Server::class); $this->app->bind(Swoole::class, function (App $app) { return new Swoole($app); }); $this->app->bind('swoole', Swoole::class); } public function boot(Route $route) { $this->commands(ServerCommand::class); if ($this->isWebsocket) { $route->group(function () use ($route) { $route->get('socket.io/', '@upgrade'); $route->post('socket.io/', '@reject'); })->prefix(Controller::class)->middleware(Middleware::class); } } /** * Create swoole server. */ protected function createSwooleServer() { $server = $this->isWebsocket ? WebsocketServer::class : HttpServer::class; $config = $this->app->config; $host = $config->get('swoole.server.host'); $port = $config->get('swoole.server.port'); $socketType = $config->get('swoole.server.socket_type', SWOOLE_SOCK_TCP); $mode = $config->get('swoole.server.mode', SWOOLE_PROCESS); static::$server = new $server($host, $port, $mode, $socketType); $options = $config->get('swoole.server.options'); static::$server->set($options); } }
Websocket-Routing-Konfigurationsmethode
nbsp;html> <meta> <title>Title</title> <script></script> <script> const socket = io('http://localhost:808'); socket.emit("test", "your message"); socket.on("test",function(res){console.log(res)}); </script>
Beziehen Sie sich auf die oben beschriebene Methode, um den neuen Websocket-Dienst zu verwenden. Natürlich verfügt tp-swoole3.0 auch über viele weitere neue Funktionen, die Sie unbedingt erkunden und ausprobieren sollten.
Ich werde im nächsten Artikel auch meinen Nutzungsprozess mit Ihnen teilen.Das obige ist der detaillierte Inhalt vonthinkphp 6.0 swoole erweitert die Verwendung von WebSocket. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!