首页 » Web前端 » phpswooletcp技巧_基于Swoole若何搭建TCP做事你掌握了吗

phpswooletcp技巧_基于Swoole若何搭建TCP做事你掌握了吗

访客 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

通过Swoole可以快速创建一个TCP做事,新建一个文件命名为 tcp_server.php,代码如下:

tcp_server.php

phpswooletcp技巧_基于Swoole若何搭建TCP做事你掌握了吗

在命令行实行如下命令就可以开启TCP做事:

phpswooletcp技巧_基于Swoole若何搭建TCP做事你掌握了吗
(图片来自网络侵删)

php tcp_server.php

运行完命令后就可以通过 netstat 工具查看做事是否启动成功,如果已经在监听9501端口了,这时就可以利用 telnet/netcat 工具来连接做事器了。

telnet 127.0.0.1 9501helloServer: hello

netstat工具利用方法:netstat -an | grep 9501

代码逻辑剖析:

通过以上代码就可以创建一个TCP做事,监听的端口是9501。
它的逻辑很大略,当客户端$socket通过网络发送一个hello字符串时,做事器端会回答一个Server:hello字符串。

Server是异步做事器,所以是通过监听事宜的办法来编写程序的。
当对应的事宜发生时,底层会主动回调指定的函数。
如当有限的TCP连接金额入时,会实行 onConnect 事宜回调,当某个连接向做事器发送数据时会回调 onReceive 函数。

把稳事变:

做事器可以同时被成千上万个客户端连接,$fd 便是客户端连接的唯一标识符Receive 事宜的回调函数中 $from_id 为线程ID调用 $srver->send() 方法向客户端连接发送数据,参数便是 $fd 柯达护短标识符调用 $server->close() 方法可以逼迫关闭某个客户端连接客户端可能会主动断开连接,此时会触发 onClose 事宜回调

无法连接到做事器的大略检测手段:

在linux下,利用 netstat -an | grep 端口,查看端口是否已经被打开处于Listening状态上一步确认后,再检讨防火墙问题把稳做事器所用的IP地址,如果是127.0.0.1回环地址,则客户端只能利用127.0.0.1才能连接上用的阿里云做事器或者腾讯云做事器,须要在安全权限组进行设置开拓的端口

TCP做事已经启动,下面我们要用Swoole搭建TCP客户端来连接TCP做事。
新建一个文件,命名为 tcp_client.php,代码如下:

tcp_client.php

上面代码创建了一个TCP的同步客户端,此客户端用于连接 server.php 开启的TCP做事。
向做事端发送一个 hello world 字符串,做事器会返回一个 Server:hello world 字符串。

在命令走运行如下命令就可以连接TCP做事:

php tcp_client.phpServer:hello world

这个客户端是同步壅塞的,connect/send/recv 会等待IO完成后再返回。
同步壅塞操作并不消耗CPU资源。
当IO操作未完成时,当提高程会自动转入 sleep 模式。
当IO完成后,操作系统会唤醒当提高程,连续向下实行代码。

流程如下:

TCP须要进行3次握手,以是connect至少须要3次网络传输过程在发送少量数据时,$client->send 都是可以立即返回的。
发送大量数据时,socket 缓冲区可能会塞满,send 操作会壅塞。
recv 操作会壅塞等待做事器返回数据,recv 耗时即是做事器处理韶光+网络传输耗时之和。

TCP客户端还有一种异步非壅塞的实现形式。
利用异步模式时,connect 会理解返回 true。
但实际上连接并未建立。
这时不能在 connect 后立即利用 send 发送数据,须要先通过isConnected() 判断是否连接成功。
当连接成功后,系统会自动回调 onConnect 函数。
这时才可以利用 send 函数向做事器发送数据。

通过上面的代码我们就实现了TCP做事端和客户端,当做事端和客户端建立TCP连接后,如何坚持连接不断开呢?下面我们将先容一下基于Swoole搭建的TCP做事器心跳坚持方案。

正常情形下客户端中断TCP连接时,会发送一个FIN包,进行4次断开握手来关照做事器。
但一些非常情形下,如客户端溘然断电断网或者网络非常,做事器可能无法得知客户端已断开连接。
尤其是移动网络,TCP连接非常不稳定,以是须要一套机制来担保做事器和客户端之间的连接的有效性。

Swoole扩展本身内置了这种机制,开拓者只须要配置一个参数即可启用。
Swool在每次收到客户端数据会记录一个韶光戳,当客户端在一定韶光内未向做事器端发送数据,那做事器会自动割断连接。

配置方法如下:

上面的设置便是每5秒侦测一次心跳,一个TCP连接如果在10秒内未向做事器发送数据,连接将会被割断。

通过以上案例我们对Swoole的事宜驱动模型有了一定的理解。
下面我们将详细先容Swoole的回调事宜。

事宜实行顺序

所有事宜回调均在 $server->start 后发生做事器关闭程序终止时末了一次事宜是 onShutdown做事器启动成功后,onStart /onManagerStart / onWorkerStart 会在不同的进程内并发实行onReceive / onConnect / onClose 在 Worker 进程中触发Worker / Task 进程启动/结束时会分别调用一次 onWorkerStart / onWorkerStoponTask 事宜仅在 task 进程中发生onFinish 事宜仅在 Worker进程中发生

事宜函数先容

onStartonShutdownonWorkerStartonWorkerStoponWorkerExitonConnectonReceiveonPacketonCloseonTaskonFinishonPipeMessageonWorkerErroronManagerStartonManagerStop

作为web开拓的佼佼者PHP并不逊色其他措辞,加上swoole后更加是为虎傅翼!
进军通信 、物联网行业开拓百度舆图、百度订单中央等!
年后更是霸占程序员招聘措辞第二名,寒冬裁员期过后正是各大企业扩大招人的期间,现在市场低级程序员泛滥,进阶中高等程序员绝对是各大企业急需的人才,这套教程适宜那些1-6年的PHP开拓者进阶中高等提升自己,在金九银十中找到高薪职位!

领取办法:点赞关注

领取办法:点赞关注小编后私信【资料】获取资料领取办法!

标签:

相关文章