Think-Swoole-Tutorial WebSocket-Nachrichten, Broadcasts und Swoole-Native-Methodenaufrufe
Was ist der fd des Clients? fd ist die eindeutige Kennung des Clients in Swoole, die wiederverwendet wird Eingehende Verbindungen werden wiederverwendet und die aufrechterhaltene TCP-Verbindung fd wird nicht wiederverwendet.
Holen Sie sich die FD des aktuellen Clients
app/listener/WsConnect.php
<?php declare (strict_types = 1); namespace app\listener; use \think\swoole\Websocket; class WsTest { /** * 事件监听处理 * * @return mixed */ public function handle($event,Websocket $ws) { // $ws = app('think\swoole\Websocket'); // 单例 //获取当前发送消息客户端的 fd var_dump($ws -> getSender()); } }
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> 消息:<input type="text" id="message"> 接收者:<input type="text" id="to"> <button onclick="send()">发送</button> <script> var ws = new WebSocket("ws://127.0.0.1:9501/"); ws.onopen = function(){ console.log('连接成功'); } ws.onmessage = function(data){ console.log(data.data); } ws.onclose = function(){ console.log('连接断开'); } function send() { var message = document.getElementById('message').value; var to = document.getElementById('to').value; console.log("准备给" + to + "发送数据:" + message); ws.send(JSON.stringify(['test',{ to:to, message:message }])); //发送的数据必须是 ['test',数据] 这种格式 } </script> </body> </html>
Mit anderen Worten, die vom Server gesendeten Nachrichten werden von ws.onmessage in HTML empfangen.
Eine Nachricht (einzeln oder in einer Gruppe) an den Client des angegebenen fd sendenapp/listener/WsTest.php<?php declare (strict_types = 1); namespace app\listener; use \think\swoole\Websocket; class WsTest { /** * 事件监听处理 * * @return mixed */ public function handle($event,Websocket $ws) { // $ws = app('think\swoole\Websocket'); // 单例 //获取当前发送消息客户端的 fd var_dump($ws -> getSender()); //发送给指定 fd 的客户端,包括发送者自己 $ws -> to(intval($event['to'])) -> emit('testcallback',$event['message']); } }
Nach dem Senden ist ersichtlich, dass nur die Clients mit fd 1 und 2 die Nachricht empfangen können (dh der Absender der Nachricht empfängt die Nachricht auch), während der Client mit fd 3 die Nachricht nicht empfängt :
Nach dem Senden ist ersichtlich, dass nur die Clients mit fd 1 und 2 die Nachricht empfangen können (dh der Absender der Nachricht empfängt die Nachricht auch), während der Client mit fd 3 erhält die Nachricht nicht:
Eine Broadcast-Nachricht senden
Eine Broadcast-Nachricht besteht darin, eine Nachricht an alle Kunden zu senden, jedoch nicht an Sie selbst. app/listener/WsConnect.php<?php declare (strict_types = 1); namespace app\listener; use \think\swoole\Websocket; class WsTest { /** * 事件监听处理 * * @return mixed */ public function handle($event,Websocket $ws) { //获取当前发送消息客户端的 fd var_dump($ws -> getSender()); //发送广播消息 $ws -> broadcast() -> emit('testcallback',$event['message']); } }
$ws -> setSender(2) -> to(3) -> emit('testcallback',$event['message']);
$manager = app('think\swoole\Manager'); $manager -> getServer() -> isEstablished(2);
Das obige ist der detaillierte Inhalt vonWebSocket-Nachrichten, Broadcasts und native Methodenaufrufe von Think-Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!