78、Workerman通信框架原型设计

2022-10-11 22:10:55 170 0
魁首哥

根据前面所介绍的知识点,我们已经学习如下:

  • 面向对象
  • 错误与异常处理
  • 多进程
  • 进程间通信
  • 网络编程

等等知识内容.

那么本文,我们将尝试,如果是我们自己来设计与实现类似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、最终版原型图

根据上面的思考,我们得到最终的设计图.如下图所示

收藏
分享
海报
0 条评论
170
上一篇:服务器配置(php) 下一篇:Socket.io-file NPM模块中的文件类型

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码