专栏首页浪子编程走四方Swoole学习一之TCP协议

Swoole学习一之TCP协议

什么是Swoole?

Swoole是一个高性能的网络通信引擎,提供了多种的网络通信协议。例如UDP、TCP、Http和WebSocket等各种通信协议。可以使完全同步的代码实现异步执行程序,例如异步Redis、异步MySQL、协程Http等异步IO操作。

如何安装Swoole

Swoole作为PHP的一个扩展库,在使用的过程中也和其他的函数库并无什么使用上的差别,但这个库又不是一个普通的库。这个库分为服务端和客户端,首先我们需要去通过内置的函数启动服务,然后在去请求服务。 安装的步骤也很简单,和其他的PHP函数库操作并差别,直接可以参考安装步骤 ,按照教程安装完成之后,我们就可以正常使用啦!PHP安装Swoole扩展

第一个Demo

该demo是一个TCP服务的简单示例。 1.服务端代码

<?php
//  1.创建一个swoole对象
/**
 * swoole_server(主机地址,端口号);
 */
$swoole = new swoole_server('127.0.0.1', 9502);

// 设置连接参数
$swoole->set([
    'reactor_num' => 2, // 线程数(全异步非阻塞服务器 worker_num配置为CPU核数的1-4倍即可)
    'worker_num' => 2, // 工作进程数,该配置小于reactor_num配置时,swoole自动降低reactor_num的配置数
    'max_conn' => 2, // 最大连接数(当前演示版本最低为36)
    'max_request' => 100, // 最大请求数,表示在worker进程处理完n个请求之后,manager进程重新创建一个worker进程来处理请求,避免造成内存溢出情况.
    'log_file' => '/usr/local/var/www/swoole/log/log.log',// 错误日志文件
    'heartbeat_check_interval' => 30, // 轮询所有TCP连接,将超过心跳时间的连接关闭掉
    'heartbeat_idle_time' => 30 // 心跳时间检测,如果tcp连接超过该时间之后,会自动关闭连接
]);

//  2.监听连接事件
/**
 * on(event_name,function(swoole对象,客户端标识){});
 */
$swoole->on('connect', function ($swoole, $fd) {
    echo '客户端' . $fd . '在' . date('Y-m-d H:i:s') . '连接成功';
});

//  3.监听接收数据事件
/**
 *on(event_name,function(swoole对象,客户端标识,线程数,客户端数据){});
 */
$swoole->on('receive', function ($swoole, $fd, $reactor_id, $data) {
    $swoole->send($fd, '用户发送的数据为' . $data . '客户端标志为' . $fd . '来源form_id为' . $reactor_id);
});

//  4.监听链接关闭事件
/**
 * on(event_name,function(swoole对象,客户端标识){});
 */
$swoole->on('close', function ($swoole, $fd) {
    echo '客户端' . $fd . '在' . date('Y-m-d H:i:s') . 'close-success';
});

// 5.启动服务
$swoole->start();

2.客户端代码

<?php
/**
 * Created Author: 编程浪子走四方
 * Author: 编程浪子走四方
 * System: Mac Pro
 * System User: apple
 * Date: 2019-07-12
 * Time: 11:15
 */
// 1.创建客户端连接对象并且连接为tcp连接
$ser = new swoole_client(SWOOLE_SOCK_TCP);

// 2.创建swoole连接
$ser->connect('127.0.0.1', 9502);

// 3.客户端输入数据并接收
fwrite(STDOUT, '请输入内容:');
$content = fwrite(STDOUT, fgets(STDIN));

// 4.将数据发送到swoole服务(可以将服务端的代码中的3相互对应参考)
$ser->send($content);

// 5.接受swoole服务返回的数据
$result = $ser->recv();

echo $result;

// 6.关闭连接
$ser->close();

如何操作第一个Demo

1.启动我们的Swoole,服务端的代码是PHP文件编写,所以我们用cli模式来启动服务(在Swoole中绝大部分的操作都是cli模式)

php index.php

这样Swoole服务就启动了。接下来,查看我们设置的9502端口是否被开启,来验证我们的服务是否真正的被打开了。

ps -anp | grep 9502

接下来,我们测试一个客户端向服务器端发送数据.执行客户端代码,这个案例需要结合上面的服务端和客户端的代码便知晓.

php index.php

除了使用PHP代码当客户端使用外,TCP协议还支持telnet连接,下面使用telnet测试连接.

telnet 127.0.0. 9502

如果出现下面的结果,则表示能够正常连接,同时我们也可以输入任意内容,服务端接收到数据之后就会输出到终端.

测试多个连接.在Swoole中,可以开启一个服务多个客户端,因此我们只需要启动一个Swoole服务,创建多个telnet连接也是可行的.我们打开多个窗口去使用telnet连接服务端,此时会看到服务端终端输出如下信息.

本文分享自微信公众号 - 卡二条的技术圈(gh_0275b8ba153f),作者:浪子编程走四方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 个人常用设计类网站汇总分享

    由于自己偶尔会写一些微信公众号的文章,同时在学习ps的过程中也遇到一些不错的网站。这里总结下来,希望对大家有帮助。推荐的只是网站,有大量优秀的客户端设计工具,后...

    卡二条的技术圈子
  • 编程学习中,这几点你还是的注意

    说到编程行业这个,可能对于行外人来说,什么高大上啊,工资高啊,压力大啊等等词语会拿来形容从事该行业的的人员。没错,这些词语确实是能够形容该行业,也不完全正确!正...

    卡二条的技术圈子
  • Composer 使用使用详解

    Composer 是 PHP 的一个包依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻...

    卡二条的技术圈子
  • 2-SIII-Android数据固化之Xml的Pull解析和存储

    张风捷特烈
  • 如何在Intel官网申请Fortran编译器的License

    Intel Parallel Studio XE 有三种版本:Composer Edition,Professional Edition和Cluster Edi...

    fem178
  • 关于《如何塑造自己成为一名合格的软件工程师》的讨论

    毕业十年了,正值班级十周年聚会之际,我要回母校看看,同时也应邀做一个关于《如何塑造自己成为一名合格的软件工程师》的讲座。

    阿敏总司令
  • GitHub 上最火,最热门的机器学习和人工智能,数据科学项目

    最近,普拉纳夫 · 达尔(Pranav Dar)发文总结了 2018 年 2 月份 Github 上最火的 5 个数据科学和机器学习项目。

    非著名程序员
  • apache 虚拟主机的配置

    由于项目的需要,开始学习php,开始就把我跟憋住了,配置虚拟主机,看网上的配置,跟着一步一步的走,总是不通,原来呢,是没有使用虚拟主机配置是成功。我就想着,得,...

    用户5640963
  • 一日一技:如何让Django 的app migration重新与数据库同步

    今天的文章,没有用过Django的同学可能难以理解我在说什么。但是如果你被Django的migration折腾过,那么你一定会感谢这篇文章。

    青南
  • Gradle 6 针对已有的构建如何创建一个构建扫描

    构建扫描(build scan)是一个中心化并且可以共享的构建记录。这个构建记录通常能够告诉在构建中发生了什么并且为什么会发生。

    HoneyMoose

扫码关注云+社区

领取腾讯云代金券