
网络编程
文章平均质量分 61
socket网络编程
raoxiaoya
这个作者很懒,什么都没留下…
展开
-
websocket如何做负载均衡
websocket如何做负载均衡原创 2023-03-23 10:37:38 · 2353 阅读 · 0 评论 -
socket编程 - strace查看进程的系统调用
yum install -y stracestrace -f -p进程号id原创 2019-09-09 19:08:33 · 1543 阅读 · 0 评论 -
socket编程 - TCP/HTTP客户端工具
TCP连接工具:1、telnet localhost 88882、nc localhost 88883、自己写客户端https://gitee.com/phprao/socket/blob/master/socketClient.php建议使用 2 和 3,因为 telnet 退出有点麻烦,并且更重要的一点是,它的退出并不会主动关闭 tcp 连接,导致服务端依然可以读写socket,会给...原创 2020-05-02 12:00:09 · 1669 阅读 · 0 评论 -
通过系统调用分析curl_multi运行原理 PHP
curl_multi 允许你可以并发的发起请求,再来逐个处理响应数据,说简单点就是利用了NIO + select / poll涉及到的函数1、curl_multi_exec原型:curl_multi_exec ( resource $mh , int &$still_running ) : int描述:处理在栈中的每一个句柄。无论该句柄需要读取或写入数据都可调用此方法。就这,几个人能看懂是啥意思?示例中为何总是将它放在do…while中?$mh:连接集合。$still_running:原创 2020-06-01 23:42:54 · 1968 阅读 · 0 评论 -
socket编程 - PHPStorm添加Event扩展代码提示以及如何制作代码提示包
Event扩展在PHPStrom中并没有代码提示无论你选择那个PHP版本,所以需要自己添加。github是个好东西,你能想到的基本它都有,尝试着搜索 event-ide-helper 就能找到几个,选择最近更新的一个,因为Event扩展也一直在更新。选择 https://github.com/PaulXu-cn/event-ide-helper别忘了star一下!!下载git clone https://github.com/PaulXu-cn/event-ide-helper通过查看这个项原创 2020-05-19 17:50:32 · 912 阅读 · 0 评论 -
socket编程 - Event扩展的使用(一)
PHP默认没有提供epoll的函数,需要安装llibevent或者event扩展,建议使用event扩展。不管是llibevent或者event扩展,都需要先安装libevent程序来提供api。安装教程 https://blog.youkuaiyun.com/raoxiaoya/article/details/106170760epoll实现原理 https://blog.youkuaiyun.com/raoxiaoya/article/details/106185479event扩展提供的内容要明确的一点是,eve原创 2020-05-18 10:43:31 · 1444 阅读 · 0 评论 -
socket编程 - select, poll, epoll 之间的区别
转载自:https://www.cnblogs.com/aspirant/p/9166944.html(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用户传入的数组拷转载 2020-05-20 08:45:04 · 761 阅读 · 0 评论 -
socket编程 - 演化过程之IO多路复用epoll原理
在学习socket编程之前,先要了解TCP通讯,因为我们常用的服务器都是基于TCP协议的。关于TCP的详细解释 https://blog.youkuaiyun.com/raoxiaoya/article/details/106113128epoll的实现原理:创建监听fd => 3。调用 epoll_create() 返回一个文件描述符 => 4,系统在内核空间开辟空间 Z 和 X,并都关联到 4fd。调用 epoll_ctl(4fd,…) 将 3fd 加入到 Z 空间,监听3fd的EPOLL原创 2020-05-18 10:15:45 · 881 阅读 · 0 评论 -
socket编程 - 一些优秀的PHP异步框架
ReactPHP仓库地址:https://github.com/reactphpReactPHP号称PHP版的node,包含很多独立组件,这些组件都可单独使用。异步http客户端reactphp/http-clientclue/reactphp-buzzworkerman异步http客户端walkor/http-clientswoole生态协程http客户端swlib/saber...原创 2020-06-02 22:55:10 · 725 阅读 · 0 评论 -
socket编程 - 关于 unix socket 的概念与应用
关于 unix socket 的概念与应用socket通信有以下二种,1、Internet domain socket 基于网络协议栈的,是网络中不同主机之间的通讯,需要明确IP和端口。2、unix domain socket 同一台主机内不同应用不同进程间的通讯,不需要基于网络协议,不需要打包拆包、计算校验和、维护序号和应 答等,只是将应用层数据从一个进程拷贝到另一个进程,主要是基...原创 2019-08-29 17:20:02 · 2160 阅读 · 0 评论 -
socket编程 - 阻塞-非阻塞,同步-异步,IO多路复用
socket-IO模型,阻塞-非阻塞,同步-异步,IO复用IO模型Linux系统提供的5种IO模型:1,阻塞IO(blocking IO)2,非阻塞IO (nonblocking IO)3,IO复用(select, poll, epoll) (IO multiplexing)4,信号驱动IO (signal driven IO (SIGIO))5,异步IO (asynchronous...原创 2019-09-06 11:50:07 · 981 阅读 · 0 评论 -
socket编程 - Event扩展的使用(五)信号处理器及其原理
类似于定时器,信号处理器是当前进程收到特定的信号后的事件处理机制。关于信号操作系统已经为进程的每一个信号设置了默认的处理函数,并且允许应用程序重新设置信号的处理程序。这就是我们要来实现的功能。1、创建持久的信号处理器$timer = new Event($eventBase, $signo, Event::SIGNAL | Event::PERSIST, [$this, 'callbackOnSignal']);2、创建一次性的信号处理器$timer = new Event($event原创 2020-05-31 14:40:37 · 919 阅读 · 0 评论 -
socket编程 - Event扩展的使用(四)定时器及其原理
Event类提供了毫秒级定时器的事件回调机制。创建定时器事件和创建普通的读时间事件一样简单。1、创建持久的定时器$timer = new Event($eventBase, -1, Event::TIMEOUT | Event::PERSIST, [$this, 'callbackOnTimer']);2、创建一次性的定时器$timer = new Event($eventBase, -1, Event::TIMEOUT, [$this, 'callbackOnTimer']);或者使用原创 2020-05-31 12:41:27 · 1046 阅读 · 0 评论 -
socket编程 - 何为Reactor模式
Reactor模式,是一种事件驱动机制,也叫反应器模式。应用程序需要提供相应的接口并注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。在Libevent中也是一样,向Libevent框架注册相应的事件和回调函数;当这些事件发生时,Libevent会调用这些回调函数处理相应的事件(I/O读写、定时和信号)。使用Reactor模型,必备的几个组件:事件源、Reactor框架、多路复用机制和事件处理程序。Reactor模式是一种网络编程模式,原创 2020-05-31 10:06:51 · 928 阅读 · 0 评论 -
socket编程 - socket_xxx函数与stream_socket_xxx函数之间的区别
在使用PHP的网络编程函数的时候,我们会看到PHP提供了两个函数组 socket_xxx 和 stream_socket_xxx,他们都可以完成,并且 stream_socket_xxx 使用起来更为方便,socket_xxx 使用起来就像原始的 socket 一样。PHP提供了两种类型的socket:socket 和 stream_socket, 二者API互不兼容,一个是 stream 资源...原创 2019-09-07 09:55:54 · 1290 阅读 · 0 评论 -
socket编程 - Event扩展的使用(三)
拜libevent所赐,Event扩展也提供了事件驱动的http服务器,也就是 EventHttp 类,每个请求都被封装为一个 EventHttpRequest 对象。请求和响应数据封装在EventBuffer对象里面。个人感觉过度封装了,导致应用程序的操控权限有限。代码:https://gitee.com/phprao/socket/blob/master/server/socketServerEventHttp.php...原创 2020-05-30 23:11:24 · 656 阅读 · 0 评论 -
socket编程 - 演化过程之IO多路复用select / poll
所谓多路:把每个连接看成一条路的话,那么多个连接就是多路的意思。多路复用:询问一次就能知道多个连接的状态。多路复用器:select, poll, epoll(unix系统), kqueuePHP服务端示例代码https://gitee.com/phprao/socket/blob/master/socketServerSelect.php...原创 2020-05-17 21:52:26 · 617 阅读 · 0 评论 -
socket编程 - 演化过程之NIO(non-blocking IO)
在学习socket编程之前,先要了解TCP通讯,因为我们常用的服务器都是基于TCP协议的。关于TCP的详细解释 https://blog.youkuaiyun.com/raoxiaoya/article/details/106113128随着操作系统的发展,开始支持非阻塞IO。于是 socket_accept, socket_read 函数可以做到非阻塞了。主要函数 socket_set_nonblock($sock);将监听的socket和客户端socket都设置为非阻塞。首先来阐述一下fd的状态:监听s原创 2020-05-17 20:37:17 · 676 阅读 · 0 评论 -
socket编程 - 演化过程之BIO(blocking IO)
在学习socket编程之前,先要了解TCP通讯,因为我们常用的服务器都是基于TCP协议的。关于TCP的详细解释 https://blog.youkuaiyun.com/raoxiaoya/article/details/106113128最开始的时候socket之间的通讯都是阻塞的,比如 socket_accept, socket_read函数都会阻塞进程,这使得服务端的并发能力很低。其流程图如下:对于BIO模式已经没人用了,就不做过多说明。PHP服务端示例代码https://gitee.com/phpr原创 2020-05-17 20:16:10 · 616 阅读 · 0 评论 -
socket编程 - tcp并发压力测试工具
代码地址:https://gitee.com/phprao/socket/blob/master/tcpPressure.php使用了多进程,需要在Linux下使用使用:php tcpPressure.php -c100 -n100000 -h127.0.0.1 -p8888 -kQPS:3455原创 2019-09-09 12:00:28 · 6734 阅读 · 0 评论 -
socket编程 - Event扩展的使用(二)
socket编程 - Event扩展的使用(二)原创 2020-05-29 09:16:16 · 1122 阅读 · 0 评论 -
socket编程 - TCP三次握手与四次握手
一、TCP报文段每个TCP报文段分为:TCP首部和TCP数据部分;以下是TCP首部的结构图。对于TCP首部,我们可以这么看,前面是20字节的固定部分,包括五大块,每块4个字节(32位),所以从前到后依次为:源端口,目的端口,序号,确认号,数据偏移,保留,。。。。。。对各个组成部分的解释:源端口和目的端口:各占2字节。序号(seq):4字节,表示数据部分第一个字节的编号,TCP以字节流的方式传输数据,并且每一个字节都按顺序编号,比如此时序号为100,数据长度200字节,那么下一个报文的序号为30原创 2020-05-15 22:21:12 · 1505 阅读 · 0 评论 -
socket编程 - PHP中的资源类型与文件描述符
资源类型资源数据类型是PHP4引进的。资源是一种特殊的变量类型,保存了到外部资源的一个引用:如打开文件、数据库连接、图形画布区域等。资源是通过专门的函数来建立,使用,关闭的,比如 fopen, socket_create, socket_accept等。资源ID与fdfunction fun2(){ $fp1 = fopen("test.php", "rw"); var_dump($fp1); $fp2 = socket_create(AF_INET, SOCK_STREA原创 2020-05-25 10:18:28 · 1125 阅读 · 0 评论