Cygwin是啥?Cygwin是一个可原生运行于Windows系统上的POSXI兼容环境。

是的,我又开新专辑了​​《零基础swoole学习笔记》​​。不是我太贪心,而是最近半年和小伙伴一直在用swoole开发,踩了些坑,为了让这些坑发挥余热,所以就有了这个专辑。

坊间一直流(zheng)传(lun)“PHP誉为最好的编程语言,而Swoole让PHP成为了最好的编程语言”,足以说明swoole对php的重要性。

PHP的优势是简单、开发效率高,可以快速实现产品功能。而作为一个动态脚本语言并不是为计算密集的场景设计的,所以在面对服务端的高并发、IO密集型场景时就有点心有余而力不足。

这时候Swoole诞生了,它使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询,内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。

Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。而随着Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。

Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

Swoole是服务端的框架,运行在Linux环境中,“工欲善其事,必先利其器”本专辑开篇的重点就是怎样在Windows系统上搭建好Linux的开发环境(Mac用户自行忽略)。

-·-  全文结构 -·-**

Cygwin是什么
  • 1、Cygwin是什么
  • *

1.1、从软件角度理解系统

计算机世界里存在各种各样的操作系统,目前通用操作系统有主流的三大类:

  1. UNIX,通用操作系统鼻祖,发展出特别多衍生系统;
  2. Windows,微软家根基,桌面市场霸主;
  3. GNU/Linux,UNIX近亲,有各种发行版如Ubuntu、CentOS等。

这些系统有各自的内核,出于系统稳定性考虑是不允许用户程序直接操作内核,同时也将内核开发和应用软件开发隔离开来,系统将必要的函数封装成库供应用软件调用,约定的规范即为应用软件接口(Application Program Interface,API)。

API函数库是连接用户软件和系统内核桥梁,或者是“协议”,操作系统厂商写好函数库说明书,应用软件开发者不必关心其内部是如何实现的,用的时候对照着API手册查询就够了。

有了封装库的中间层,系统逐渐被划分为多层。硬件基础之上堆叠了系统内核、系统函数库等中间层,在应用程序内部还可以继续细分多个层次,这样把最终用户与硬件隔离开来,增强了抽象能力、屏蔽底层细节,也让开发者分工,专注于各自层次的开发,同时降低了软件迁移的难度。

1.2、Cygwin的组成

先辈David Wheeler大神曾经说过:“All problems in computer science can be solved by another level of indirection(计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决)”。

为了让各个系统之间的API统一,IEEE牵头制定POSIX标准。POSIX标准主要就是针对UNIX API而制订,不管函数如何包装、功能如何实现,但API按照标准约定来。目前Linux及Windows都部分兼容了POSIX标准。

而Cygwin的作用就是在Windows中增加一个中间层——兼容POSIX的模拟层,并在此基础上构建了大量Linux-like的软件工具。

Cygwin将cygwin1.dll、函数库、应用程序等文件按照UNIX/Linux的目录树架构进行组织存放,如/bin、/usr、/lib、/etc、/var、/home等等都存在于Cygwin安装路径下,用户从终端登陆进Cygwin的shell后,就可以像在UNIX/Linux系统那样使用相同的命令、工具。

  • 2、Cygwin的优缺点
  • *
  • 2.1、Cygwin的优势

在Windows开发Linux,常用的方法是安装Linux系统或者虚拟机,而有了Cygwin免去了这些麻烦。

首先它相对系统或者虚拟机安装及卸载方便,Cygwin提供了包管理工具,可按需安装/卸载软件包,一个能运行起来的最小Cygwin系统只需要几十Mb。

而且Cygwin做到了源码级的兼容性,GNU、UNIX、Linux软件的源代码几乎不用修改就可以在Cygwin环境中编译构建成功。

另外,Cygwin的程序运行与Windows互不干扰,高效的命令行工具与Windows图形界面各有所长、形成互补。

Cygwin把Windows的磁盘挂载到/cygdrive下,如c盘就是/cygdrive/c、d盘就是/cygdrive/d,Cygwin中的应用程序可以读写Windows磁盘中的文件,Windows应用程序也可以读写Cygwin目录中的文件(但要注意不要把文件搞乱了)

Cygwin的shell中可以启动Windows程序,Windows的cmd中也可以启动Cygwin的程序,但由于字符编码不同可能造成乱码;多一套可用的API,对于Windows开发者,程序代码既可以调用Win32 API,又可以调用Cygwin API,甚至混合。

  • 2.2、Cygwin的劣势

“吹嘘”了这么多优点,Cygwin也有一定的缺点,不过对于非系统级别的开发人员来讲,基本上可以忽略。

一是由于是在Win32系统之上模拟实现POSIX兼容层,应用程序在底层就多了一个层级的函数调用,效率比UNIX/Linux系统上原生的应用程序肯定低,不过这也是在效率和兼容性之间选择的一个平衡。

另外Cygwin未实现二进制文件级别的兼容,Cygwin系统上的应用程序编译后仍然是Windows PE格式的可执行文件,UNIX/Linux系统上的二进制可执行文件在Cygwin上不能运行。

与Windows互操作不足,Windows原生程序并不能利用cygwin1.dll提供的与UNIX/Linux兼容的信号、pty设备等,除非改写程序代码重新编译,但这样新的程序就依赖于cygwin1.dll,就不是“Windows原生程序”了。

  • 2.3、Cygwin的应用场景

常见的应用场景包括但不限于:

(1)Shell命令行使用

Shell是UNIX/Linux的精华所在,骨灰级玩家可以做到不用鼠标只敲命令完成所有工作,用户最常用的大量命令在Cygwin下均可照常使用,在UNIX/Linux编写的脚本也可以几乎不加修改地在Cygwin下运行。

(2)交叉编译构建环境搭建

Cygwin环境中已移植好了gcc等开发工具,大量的交叉工具链(如arm-none-gnu-eabi-gcc、arm-none-gnu-eabi-binutils)也可以在Cygwin中制作,就算只有Windows原生版本的,Cygwin shell中也能调用,那么利用Cygwin就能搭建起交叉编译构建环境。

(3)程序移植

把符合POSIX标准的程序移植到Windows下,还有更多正在由个人、社区、商业公司、研究机构不断贡献的开源自由软件,造福广大Windows用户,利用已有的GNU、UNIX、Linux软件会使程序移植越来越容易。

(4)兼用POSIX API和Win32 API开发

有的开发者可能对UNIX/Linux和Win32的API都熟悉,两套API也各有其优点,在Cygwin下开发者自己可以任意选取、混合使用。

  • 3、本地安装Cygwin
  • *
  • 3.1、安装Cygwin

1、进入Cygwin官方地址(​​http://www.cygwin.com/​​),下载安装包(我也为小伙伴准备了安装包,点击文末原文链接,提取码:8q2a)。

2、点击安装文件,进行安装,点击下一步。

3、根据实际情况,选择本地安装目录及下载的文件存放目录,按照过程中为下载一些文件,存放在指定目录后,以便下次安装时可以直接从该目录读取。

4、选择“direct connection” ,点击下一步,填写镜像源。我安装的时候用的是阿里云的镜像源(​​http://mirrors.aliyun.com/cyg...​​),其他开源镜像站地址如下:

网易 ​​http://mirrors.163.com/cygwin/​​

阿里巴巴 ​​https://mirrors.aliyun.com/cy...​​

华为 ​​https://mirrors.huaweicloud.c...​​

清华 ​​https://mirrors.tuna.tsinghua...​​

中科大 ​​http://mirrors.ustc.edu.cn/cy...​​

华中科大 ​​http://mirror.hust.edu.cn/cyg...​​

东软 ​​http://mirrors.neusoft.edu.cn...​​

5、链接成功后,进行下一步,选择要安装的依赖包。Swoole开发环境下需要安装的依赖包有:autoconf-archive;djgpp-gcc-objc;djgpp-gcc-objc++;gcc-objc;gcc-objc++;gdb;libc++-devel;libpcre-devel;libpcre2-devel;php;php-bz2;php-curl;php-devel;php-gd;php-json;php-mbsrtring;php-mysqli;php-pdo_mysql;php-phar;php-sockets

5、点击下一步安装,剩余的就是自动安装,在结束时可能需要勾选两个框,是图标和快捷键的创建,自行选择勾选。

5、点击桌面图标,运行命令:cygcheck -c cygwin,可查看安装的版本情况。

  • 3.1、扩容Cygwin可用内存空间

1、电脑快捷键Win+R打开电脑运行,运行:regedit,打开注册表,选择HKEY_LOCAL_MACHINE -> SOFTWARE -> Cygwin 新建Cygwin的QWORD(32位请选择DWORD)

2、名称位heap_chunk_in_mb,数值位2048MB(可自行选择,不要太小,最好1G以上,也要看windows系统内存大小),重启电脑完成。

到此就完成了