网站首页 > 技术文章 正文
根据前面所介绍的知识点,我们已经学习如下:
- 面向对象
- 错误与异常处理
- 多进程
- 多进程间通信
- 网络编程
等等知识内容.
那么本文,我们将尝试,如果是我们自己来设计与实现类似workerman的socket框架,该怎么办? 或者说,我们在设计与实现的过程中,会经历哪些思考?
这样,才能够去体验作者walkor的整个思路,也便于我们深入地阅读源码
1、原型设计
先从Workerman的框架定义出发:
Workerman是一款纯PHP开发的开源高性能的PHPsocket服务框架
1.1、关键词-"高性能"与"socket"
socket: 说明是网络通信,而根据之前的文章,php实现socket可以通过原生socket函数或者是stream库
高性能: 由于是socket通信,根据之前的文章,也能够知道高性能,在这里是指IO复用,而IO复用的实现显然是指select或libevent库/event库
1.2、原型图
根据对关键词的理解,我们就有了设计socket框架的思路。如下图所示:
2、原型设计改进
从上面的原型图中,可以看到。它是个单进程的设计方案。假设系统中没有安装event拓展,则在IO复用这块只能使用select,而select是有连接数的限制。因此引入"多进程"的方案
2.1、改进原型图-多进程
由于是多进程,因此需要考虑父子进程间的通信。如下图所示:
2.2、继续改进原型图
- 运行方式
我们实现的socket框架显然只能在cli进行执行。既然是cli,就必然要考虑守护进程运行的方式,否则shell终端被关闭,我们的程序也将跟着停止运行
- 信号监听
我们程序是守护进程的方式在后台执行,那怎么操作运行程序状态。显然是通过信号。这也说明了父子进程间的通信采用信号,而不是其它进程间的通信方式的原因
- cli执行参数解析
通过在cli执行时,传入参数,实现灵活的操作。因此需要命令行参数解析
- 传输层处理封装
我们创建的socket默认是tcp或udp等传输层的操作,为了方便维护,需要封装传输层的处理
- 应用层协议封装
在传输层的基础上,如要处理常见http、websocket、或其它自定义协议。因此需要封装好应用层协议处理
2.3、最终版原型图
根据上面的思考,我们得到最终的设计图.如下图所示
猜你喜欢
- 2024-10-12 41、php多进程基本用法 php多进程编程
- 2024-10-12 使用 Workman 做一个聊天室 wordpress聊天室插件
- 2024-10-12 21、php面向对象例子-类声明与创建
- 2024-10-12 Web-Frameworks - 谁才是最快的 Web 框架
- 2024-10-12 Casbin实战大揭秘:教育培训领域的创新实践和高效优化策略
- 2024-10-12 go 和 php 性能如何进行对比? go跟php
- 2024-10-12 27、php面向对象例子-接口类 php 面向对象
- 2024-10-12 54、php利用信号实现父子进程间通信
- 2024-10-12 24、php面向对象例子-static关键字
- 2024-10-12 分享一个不错的PHP统计监控系统,值得试一下
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)