Heim > PHP-Framework > Workerman > Hauptteil

Einführung in die Workerman-Methode zur Realisierung einer bidirektionalen Verbindung zwischen TCP und http

青灯夜游
Freigeben: 2021-02-01 12:02:32
nach vorne
5383 Leute haben es durchsucht

Lassen Sie mich Ihnen workerman die Methode zur Realisierung einer bidirektionalen TCP- und http-Verbindung vorstellen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Einführung in die Workerman-Methode zur Realisierung einer bidirektionalen Verbindung zwischen TCP und http

Verwandte Empfehlungen: „workerman Tutorial

workerman implementiert bidirektionale TCP- und HTTP-Verbindungen

Ursprünglich wollte ich GatewayWorker verwenden, um es fertigzustellen, aber am Ende wollte ich es schaffen einfacher. Verwenden Sie Workerman, um lange TCP-Verbindungen und kurze HTTP-Verbindungen mit Smart-Geräten herzustellen.
Szenarioanforderungen. Das Applet überträgt Vorgänge wie das Einschalten des Geräts oder das Anpassen der Temperatur an den Server. Der Server und das Applet verfügen über eine kurze HTTP-Verbindung und stellen nach Erhalt der Informationen eine lange TCP-Verbindung mit dem Gerät her.

1. Stellen Sie eine TCP-Verbindung her

protected $socket = 'tcp://0.0.0.0:2346';
protected $processes = 1;
protected $uidConnections = array();
Nach dem Login kopieren

2. Stellen Sie eine HTTP-Verbindung in onWorkerStart her

global $ws_worker;
    // 监听5678端口,协议websocket/http
    $ws_worker = new Work('http://0.0.0.0:5678');
    // 网页ws发来数据的时候的处理,可根据需要做处理,这里省略
    $ws_worker->onMessage = function($ws_connection, $data){
    	$redis = new Redis();
        //获取http发过来的http值
        $data = $data['get'];
        if(empty($data['type'])){
            $ws_connection->send("type为空");
        }elseif($data['type'] == 1){
            //开机
            //拿mac去redis验证是否存在,然后拿拿到http进行访问请求开机。做个定时器。到期自动请求设备关机
            $mac = $redis->hGet('facility',$data['mac']);
            if(!$mac){
                $ws_connection->send("mac地址错误");
            }
            $status = $this->sendMessageByUid($mac,'开机');//像指定用户发送消息
            if($status == 1){//回调码,判断是否成功
                $ws_connection->send("开机成功");
            }else{
                $ws_connection->send("发生错误");
            }
        }elseif($data['type'] == 2){
            //关机
            //拿mac去redis验证是否存在,然后拿拿到http进行访问请求关机。
            $mac = $redis->hGet('facility',$data['mac']);
            if(!$mac){
                $ws_connection->send("mac地址错误");
            }
              $status = $this->sendMessageByUid($mac,'关机');//像指定用户发送消息
            if($status == 1){//回调码,判断是否成功
                $ws_connection->send("关机成功");
            }else{
                $ws_connection->send("发生错误");
            }
        }
    };
    $ws_worker->listen();

}
Nach dem Login kopieren

Der obige Code ist ein Demo-Fall. Lassen Sie uns einige Verbindungstests durchführen. Bitte beachten Sie den Geschäftscode. 3. TCP-Verbindung und HTTP-Verbindung. Wir stellen eine TCP-Verbindungsanfrage vom Client.

 /**
 * 当连接建立时触发的回调函数
 * @param $connection
 */
public function onConnect($connection)
{
  $connection->send(“tcp连接\n");
    echo 'tcp连接';
    
}
Nach dem Login kopieren

Wir führen diese PHP-Datei und Serverdatei im Terminal aus, wenn die Verbindung hergestellt ist. Der Server gibt eine TCP-Verbindung aus (zu diesem Zeitpunkt handelt es sich um eine lange Verbindung)

Hinweis: Achten Sie beim Senden von Nachrichten über eine TCP-Verbindung auf das Problem der Sticky-Pakete. Das Hinzufügen von „n“ nach jeder Nachricht stellt einen Zeilenumbruch dar

Wir versuchen eine HTTP-Verbindung, die viel einfacher ist. Greifen Sie einfach auf die URL zu

<?php set_time_limit(0);

$host = "xxxxxxxx";//这里是你的服务器ip
$port = 2346;//这里是你的服务器端口
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n");

$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");
$mac = array("mac"=>'123456','ip'=>'1.2.3.4');

socket_write($socket, json_encode($mac)) or die("Write failed\n");
while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {
    echo '1';
    echo("Response was:" . $buff . "\n");
    echo("input what you want to say to the server:\n");
    $text = fgets(STDIN);
    socket_write($socket, $text);
}
socket_close($socket);
Nach dem Login kopieren

Einführung in die Workerman-Methode zur Realisierung einer bidirektionalen Verbindung zwischen TCP und http
Sie alle sollten dieses einfache Beispiel verstehen. Als Nächstes müssen Sie nur noch den Geschäftscode festlegen, dessen Umsetzung nun an Ihnen liegt.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Workerman-Methode zur Realisierung einer bidirektionalen Verbindung zwischen TCP und httpProgrammierlehre
! !

Das obige ist der detaillierte Inhalt vonEinführung in die Workerman-Methode zur Realisierung einer bidirektionalen Verbindung zwischen TCP und http. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage