PHP рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд╡рд░реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ Swoft: WebSocket рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ 1


рдпрд╣ рд▓реЗрдЦ рдЬреЛ рд╣рдо рд╕реАрдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╣реИ: рд╕реНрд╡реЙрдлрд╝реНрдЯ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред


рдпрд╣ рдЖрд▓реЗрдЦ Swoft WebSocket рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЖрдЗрдпреЗ рдЬрд╛рдиреЗрдВ Swoft рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ!

Swoft рдХреНрдпрд╛ рд╣реИ?


Swoft рдПрдХ PHP рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди microservice coroutine рдврд╛рдВрдЪрд╛ рд╣реИред рдпрд╣ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ php рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдмрди рдЧрдпрд╛ рд╣реИред


рдпрд╣ рдЧреЛ, рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЛрд░рдЯрд╛рдЗрди рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рдХреЙрд░рдЖрдЙрдЯ рдХреЙрдЗрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ PHP-FPM рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред


рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдорд╛рди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рдорд╛рди рдЧреЛ рднрд╛рд╖рд╛ рд╕рдВрдЪрд╛рд▓рди рднреА рд╣реИрдВред


рддреАрди рд╡рд░реНрд╖реЛрдВ рдХреЗ рд╕рдВрдЪрдп рдФрд░ рджрд┐рд╢рд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, Swoft рдиреЗ PHP рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ PHP рдХреЗ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдврд╛рдВрдЪреЗ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрдореНрд╕ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред


Github



рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ


swoft-cli рд▓рд┐рдП рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП swoft-cli рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


 php swoftcli.phar create:app --type ws swoft-ws-app cd swoft-ws-app composer install 

рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ


Websocket рд╕рд░реНрд╡рд░ рдХреЛ php bin/swoft ws:start рдХрдорд╛рдВрдб php bin/swoft ws:start , рдЖрдк рдиреАрдЪреЗ php bin/swoft ws:start рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ


 $ php bin/swoft ws:start Information Panel ******************************************************************************************* * WebSocket | Listen: 0.0.0.0:18308, type: TCP, mode: Process, worker: 8 ******************************************************************************************* 

рдкреЛрд░реНрдЯ рдСрдл рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╡рд┐рдЪреНрдЫреЗрдж 18308

рдореЙрдбреНрдпреВрд▓


рдирдП рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП swoft-cli рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


 php swoftcli.phar gen:ws-mod echo --prefix /echo 

рдЗрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб ( app/WebSocket/EchoModule.php ) рдЗрд╕ рддрд░рд╣:


 <?php declare(strict_types=1); namespace App\WebSocket; use Swoft\Http\Message\Request; use Swoft\Http\Message\Response; use Swoft\WebSocket\Server\Annotation\Mapping\WsModule; use Swoft\WebSocket\Server\Annotation\Mapping\OnOpen; use Swoft\WebSocket\Server\Annotation\Mapping\OnHandshake; use Swoole\WebSocket\Server; /** * Class EchoModule - This is an module for handle websocket * * @WsModule("/echo") */ class EchoModule { /** * @OnHandshake() * @param Request $request * @param Response $response * @return array */ public function checkHandshake(Request $request, Response $response): array { // some validate logic ... return [true, $response]; } /** * @OnOpen() * @param Server $server * @param Request $request * @param int $fd * @return mixed */ public function onOpen(Server $server, Request $request, int $fd) { $server->push($fd, 'hello, welcome! :)'); } } 

рдХрд╕реМрдЯреА


рдпрд╣рд╛рдБ WebSocket рд╕рд░реНрд╡рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП swoft-devtool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


php bin/swoft dclient:ws /echo рдХрдорд╛рдВрдб рдХреЛ swoft-devtool рдШрдЯрдХ рдореЗрдВ WebSocket рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЖрдк рдиреАрдЪреЗ рдХреА рддрд░рд╣ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


 Begin connecting to websocket server: 127.0.0.1:18308 path: /echo Success connect to websocket server. Now, you can send message INTERACTIVE ================================================================================ server> ?Opened, welcome #1! client> hi server> Recv: hi client> 

Github


Source: https://habr.com/ru/post/hi471598/


All Articles