前言Swoole Server应该是Swoole工具中最重要也是最核心的一个了,但没有网络服务程序开发基础的童鞋刚接触的时候往往会一头雾水,这里我们返本归元,先聊聊Server在干什么,然后我们再看看Swoole Server是怎样跑起来的~ Server之初通常,我们会把网络系统根据架构分为B/S架构和C/S架构,而这里笔者想聊的就是这里提到的S,也就是服务(Server)在干什么?
我们先从比较常见的基于PHP的Web网站开始聊起。
当我们打开http://127.0.0.1:80并看到Apache的欢迎界面时,我们知道,我们已经成功的完成了一个简单的B/S结构的程序。
那么,这个时候,这里我们说B/S中的Server具体指代的是什么呢?以下两个选项哪个是你的想法?
其实从笔者的角度而言,上述两个选项都是对的,因为Server这个词本身的含义就很丰富,根据特定的语境,它既可以指服务器,也可以指服务程序。
我们来简单扒一下,在打开这个网页的过程中,Apache作为一个Server,最少要做到哪些工作?
首先,Apache需要先运行起来,如果Apache没有运行,显然没法向浏览器提供服务(例如,输出Apache的欢迎页面)
再者,浏览器需要有一个可靠的方法找到我们刚刚运行起来的Apache(就像寄快递,要有收件方的地址)
例如我们在浏览器输入 www.baidu.com ,我们知道会打开百度的首页。
当Apache做到了上述两项工作时,我们可以简单认为它具备了作为一个Server的基础。
监听:正确的地点那么,Apache是怎么做到这两点的呢?相信怎么运行Apache这个问题不必笔者嗦,我们主要开始看看第二个问题。
我们怎么去定义这个“正确的地点”呢?最常见的方案,就是TCP/IP协议中的IP协议。
IP协议帮助客户端在浩瀚的网络中找到正确的主机,例如上文中的 127.0.0.1 主机。
如果我们的主机在局域网中被分配的IP是192.168.1.233,则其他主机也可以通过192.168.1.233这个地址找到我们的主机
但一个主机如果只能运行一个服务,就太浪费了,因此如果说IP是用来区分不同的联网设备的,Port在这就是用来区分同一个设备的不同服务的。
一般情况下,端口的编号取值范围是 [1, 65535],一般1000以下的端口都会被一些常用服务默认调用,所以尽可能不要使用。
写到这里,前文我们提到的 127.0.0.1:80 的含义就更清晰了,前面的 127.0.0.1 是IP地址,后边的80是端口。而因为80是HTTP服务的默认端口,所以访问一般的常见网站时我们并不需要写成 www.baidu.com:80 。
我们把某个服务通过某个端口对外提供服务的行为称为“监听”,形象的说,前文的Apache监听着本机的80端口,如果有客户通过这个端口发来请求,操作系统就会把请求交给Apache,Apache就可以根据请求的具体内容进行处理,并给出响应(例如,欢迎使用Apache!)。
最后,我们可以整理出简单LAMP环境中,基于HTTP协议的Web服务的交互逻辑:
而一般情况下,PHP脚本的工作就在第四步中处理具体业务,至于怎么与浏览器保持通信,PHPer一般是不关心的,直到,Swoole重新定义了PHP。
Swoole Server做了什么?前文我们以Apache作为例子,简单梳理了一下Server在做什么的问题,再回来看Swoole Server,就好理解了,Swoole允许通过PHP构造一个新的Server,提供跟Apache类似的功能,监听请求,作出响应。
那么,我们现在开始第一个简单的Swoole TCP Server的Demo。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|