热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于swoole:swoole客户端分析与讲解作为TCP链接webscoket链接等客户端

业务场景当业务中须要链接TCP,UDP,socket,websocket服务时,咱们须要编写一个客户端去链接对应的服务(比方链接某些数据源)。此时有很多种的抉择,workerman的AsyncTcpConnection,或者应用php自带的socket函数(socket_create,socket_read等函数),swoole的客户端(SwooleClient)等都能够。各有优劣,抉择适宜本人

swoole客户端

文章目录

1.swoole客户端能解决什么样的问题?

2.如何应用?

3.注意事项

1.首先明确swoole客户端能帮忙咱们解决什么样的问题?

业务场景当业务中须要链接TCP,UDP,socket,websocket 服务时,咱们须要编写一个客户端去链接对应的服务(比方链接某些数据源)。
此时有很多种的抉择,workerman的AsyncTcpConnection,或者应用php自带的socket函数(socket_create,socket_read等函数),swoole的客户端(Swoole\Client)等都能够。各有优劣,抉择适宜本人和业务的就好,这次咱们抉择Swoole\Client。

2.如何应用?
废话不多说,间接上我封装好的代码,看不懂多看正文了解,能够珍藏不便当前能够间接应用。

class SwooleClient
{
    //链接对象
    private $client;

    /**
     * SwooleClient constructor.
     */
    public function __construct()
    {
        $this->client = new Swoole\Client(SWOOLE_SOCK_TCP);
        $this->client->set(array(
            'open_eof_check' => true,   //关上EOF检测
            'package_eof'    => "\r\n", //设置EOF,包之间的分隔符
            'package_max_length' => 1024 * 1024 * 2,//设置一个包的最大数据包尺寸,单位为字节。默认2m
        ));
    }

    /**
     * Notes: 链接对应的ip
     * User: 闻铃
     * DateTime: 2021/11/17 下午10:46
     * @param string $ip 链接的ip,本地或外网ip
     * @param  int $port 端口号
     * @throws \Exception
     */
    public function connect($ip = '127.0.0.1', $port = 9501)
    {
        if (!$this->client->connect($ip, $port, -1)) {
            throw new \Exception(sprintf('Swoole Error: %s', $this->client->errCode));
        }
    }

    /**
     * Notes: 发送数据
     * User: 闻铃
     * DateTime: 2021/11/17 下午10:44
     * @param $data 发送的数据
     * @return mixed
     * @throws \Exception
     */
    public function send($data)
    {
        if ($this->client->isConnected()) {
            if (!is_string($data)) {
                $data = json_encode($data);
            }
            return $this->client->send($data);
        } else {
            throw new \Exception('Swoole Server does not connected.');
        }
    }

    /**
     * Notes: 敞开链接
     * User: 闻铃
     * DateTime: 2021/11/17 下午10:45
     */
    public function close()
    {
        $this->client->close();
    }

    /**
     * Notes: 接收数据
     * User: 闻铃
     * DateTime: 2021/11/17 下午10:45
     * @return array
     */
    public function recv()
    {
        //承受数据
        return $this->client->recv();
    }
}

如果想要作为webscoket客户端的话,也是能够的,能够应用官网的websocket包(saber)
后续更新

3.注意事项
。。。后续更新


推荐阅读
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • WindowsAPI的时间结构体、时间转换及时间获取 ... [详细]
  • PHP socket服务端与客户端的简易通信
    今天学习socket通信的同时,顺便整理了下以前初识socket的知识。现在关于php的socket通信,有些框架已经十分成熟了,比如swoole和workerman,这两个大家可以学习学 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
凌微茵_686
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有