前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swoole学习一之TCP协议

Swoole学习一之TCP协议

作者头像
Mandy的名字被占用了
发布2019-07-22 10:35:39
4950
发布2019-07-22 10:35:39
举报

什么是Swoole?

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

如何安装Swoole

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

第一个Demo

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

代码语言:javascript
复制
<?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.客户端代码

代码语言:javascript
复制
<?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模式)

代码语言:javascript
复制
php index.php

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

代码语言:javascript
复制
ps -anp | grep 9502

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

代码语言:javascript
复制
php index.php

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

代码语言:javascript
复制
telnet 127.0.0. 9502

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡二条的技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档