zoukankan      html  css  js  c++  java
  • swoole的TCP服务

    1.服务器端程序代码
    tcp_server.php

    <?php
    ///创建Server对象,监听 127.0.0.1:9501端口
    $serv = new swoole_server("127.0.0.1", 9501);

    $serv->set([
      'worker_num' => 4, // worker 进程数,cpu的1-4倍
      'max_request'=> 10000
    ]);

    // 命令行查看server开启的worker数
    // 如果当前文件名为 tcp_server.php, 则 ps aft | grep tcp_server.php

    //监听连接进入事件
    $serv->on('connect', function ($serv, $fd) {
      echo "Client: fd:{$fd} Connect. ";
    });

    //监听数据接收事件
    $serv->on('receive', function ($serv, $fd, $from_id, $data) {
      $serv->send($fd, "Server: fd:{$fd} data:{$data}");
    });

    //监听连接关闭事件
    $serv->on('close', function ($serv, $fd) {
      echo "Client: fd:{$fd} Close. ";
    });

    //启动服务器
    $serv->start();

    2.客户端程序代码
    tcp_client.php

    <?php
    /**
    * 创建同步阻塞模式下的TCP客户端
    * 同步阻塞模式下connect/send/recv会等待IO完成后再返回,服务端返回后才会向下执行。
    * 同步阻塞模式下并不会消耗CPU资源,IO操作未完成当前进程会自动转入sleep模式。
    * 当IO完成后操作系统会唤醒当前进程,继续向下执行代码。
    */
    $client = new swoole_client(SWOOLE_TCP);

    //连接到服务器
    $host = "127.0.0.1";
    $port = 9501;
    $timeout = 1; //超过与服务器交互的超时秒数会自动断开
    if (!$client->connect($host, $port, $timeout)) {
      die("[connect] failed" . PHP_EOL);
    }

    //发送数据
    $message = "hello world";
    if (!$client->send($message)) {
      die("[send] failed" . PHP_EOL);
    }

    //接收数据
    if (!$data = $client->recv()) {
      die("[recv] failed" . PHP_EOL);
    }
    echo $data . PHP_EOL;

    //关闭连接
    $client->close();

    3.服务器端执行程序
    php tcp_server.php

    在命令行下运行 php tcp_server.php 程序,启动成功后可以使用 netstat -an | grep 9501 看到,已经在监听 9501 端口。

    4.客户端执行程序
    php tcp_client.php

    5.服务器端执行结果
    Client: fd:1 Connect.
    Client: fd:1 Close.

    6.客户端执行结果
    Server: fd:1 data:hello world

  • 相关阅读:
    强迫症患者
    GG的匹配串
    漂洋过海来看你
    Fire or Retreat
    1011. A+B和C (15)
    1010. 一元多项式求导 (25)
    1009. 说反话 (20)
    1008. 数组元素循环右移问题 (20)
    1007. 素数对猜想 (20)
    1006. 换个格式输出整数 (15)
  • 原文地址:https://www.cnblogs.com/WebLinuxStudy/p/12850445.html
Copyright © 2011-2022 走看看