码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-16 00:32:31      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:proc   发送数据   func   构造函数   php   自己   事件   bsp   失败   

一、关于服务端(Swoole\Coroutine\Server):

  Swoole\Coroutine\Server是完全协程化实现的,不需要设置事件回调函数。建立连接、接收数据、发送数据、关闭连接都是顺序的,没有异步风格的并发问题;可以动态的开启关闭服务,异步风格的服务在 start() 被调用之后就什么也干不了了,而协程风格的可以动态开启关闭服务。但同时,协程风格的服务不会自动创建多个进程,需要配合 Process\Pool 模块使用才能利用多核。协程风格服务其实是对 Co\Socket 模块的封装,所以用协程风格的需要对 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
*/
Swoole\Coroutine\Server->__construct(string $host, int $port = 0, bool $ssl = false, bool $reuse_port);

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

Swoole\Coroutine\Server->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.\n";
  });
  $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.\n";
  });
  $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服务器-客户端

标签:proc   发送数据   func   构造函数   php   自己   事件   bsp   失败   

原文地址:https://www.cnblogs.com/jongty/p/12709707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!