swoole学习:TCP服务器-客户端

Posted jongty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swoole学习:TCP服务器-客户端相关的知识,希望对你有一定的参考价值。

一、关于服务端(SwooleCoroutineServer):

  SwooleCoroutineServer是完全协程化实现的,不需要设置事件回调函数。建立连接、接收数据、发送数据、关闭连接都是顺序的,没有异步风格的并发问题;可以动态的开启关闭服务,异步风格的服务在 start() 被调用之后就什么也干不了了,而协程风格的可以动态开启关闭服务。但同时,协程风格的服务不会自动创建多个进程,需要配合 ProcessPool 模块使用才能利用多核。协程风格服务其实是对 CoSocket 模块的封装,所以用协程风格的需要对 socket 编程有一定经验。目前封装层级没有异步风格服务器那么高,有些东西需要自己手动实现,比如 reload 功能需要自己监听信号来做逻辑。

  一般来说,服务端按new--set--on--start步骤进行。

二、TCP服务器:

  构造函数(对应着new一个server对象):

/**
* string $host 监听的地址 默认值:无
* int $port 监听的端口【如果为 0 将由操作系统随机分配一个端口】 默认值:无
* bool $ssl 是否开启 SSL 加密 默认值:false
* bool $reuse_port 是否开启端口重用,效果和此节的配置一样 默认值:false 版本影响:Swoole >= v4.4.4
*/
SwooleCoroutineServer->__construct(string $host, int $port = 0, bool $ssl = false, bool $reuse_port);

  set():参数 $options 必须为一维的关联索引数组,与 setprotocol 方法接受的配置项完全一致。必须在start()前设置

SwooleCoroutineServer->set(array $options);

……

  demo:

<?php
  $serv = new swoole_server("127.0.0.1", 9501);
  $serv->set([
     worker_num => 8, //worker进程数 cpu的1-4倍
     max_request => 10000,
  ]);
  //fd 客户端连接的唯一标识
  //reactor_id 线程ID
  $serv->on(connect, function($serv, $fd, $reactor_id){
     echo "Client: {$reactor_id}-{$fd}-Connect.
";
  });
  $serv->on(receive, function($serv, $fd, $reactor_id, $data){
     $serv->send($fd, Server: .$reactor_id.-.$fd. .$data);
  });
  $serv->on(close, function($serv, $fd){
     echo "Client: close.
";
  });
  $serv->start();
?>

  执行demo,新开窗口监听服务,发送信息;关闭服务

技术图片

   以上,就是swoole中tcp服务器的一个大致流程,更多的参数和方法转到官网文档:https://wiki.swoole.com/#/server/tcp_init

三、TCP客户端:

<?php
    // 连接 swoole tcp 服务
    $client = new swoole_client(SWOOLE_SOCK_TCP);
    
    if(!$client->connect("127.0.0.1", 9501)) {
        echo "连接失败";
        exit;
    }
    
    // php cli常量
    fwrite(STDOUT, "请输入消息:");
    $msg = trim(fgets(STDIN));
    
    // 发送消息给 tcp server服务器
    $client->send($msg);
    
    // 接受来自server 的数据
    $result = $client->recv();
    echo $result;

  参考官网文档:https://wiki.swoole.com/#/coroutine_client/client

 

以上是关于swoole学习:TCP服务器-客户端的主要内容,如果未能解决你的问题,请参考以下文章

8.swoole学习笔记--异步tcp客户端

Swoole系列2.3TCPUDP服务客户端

学习swoole的心得

swoole学习:初识swoole

使用Swoole 构建API接口服务

Swoole学习总结1