小程序 web socket workerman_78、Workerman通信框架原型设计

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

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

等等知识内容.

那么本文,我们将尝试,如果是我们自己来设计与实现类似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框架的思路。如下图所示:

b651fab6bcfeef49e5ee64dd22bf53f3.png

2、原型设计改进

从上面的原型图中,可以看到。它是个单进程的设计方案。假设系统中没有安装event拓展,则在IO复用这块只能使用select,而select是有连接数的限制。因此引入"多进程"的方案

2.1、改进原型图-多进程

由于是多进程,因此需要考虑父子进程间的通信。如下图所示:

fa73d33bdc6e2ae92c9a50e9a726c810.png

2.2、继续改进原型图

  • 运行方式

我们实现的socket框架显然只能在cli进行执行。既然是cli,就必然要考虑守护进程运行的方式,否则shell终端被关闭,我们的程序也将跟着停止运行

  • 信号监听

我们程序是守护进程的方式在后台执行,那怎么操作运行程序状态。显然是通过信号。这也说明了父子进程间的通信采用信号,而不是其它进程间的通信方式的原因

  • cli执行参数解析

通过在cli执行时,传入参数,实现灵活的操作。因此需要命令行参数解析

  • 传输层处理封装

我们创建的socket默认是tcp或udp等传输层的操作,为了方便维护,需要封装传输层的处理

  • 应用层协议封装

在传输层的基础上,如要处理常见http、websocket、或其它自定义协议。因此需要封装好应用层协议处理

2.3、最终版原型图

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

24ede086c6e7d484b3e3e125e447b03d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值