
>作者:韩天峰
链接:https://www.zhihu.com/question/47994137/answer/131700752
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
性能上Swoole毕竟是C语言开发的,在某些地方如内存管理、数据结构、通信协议解析上肯定要比PHP开发的workerman高。
功能上swoole提供的高级特性很多,列举几个workerman没有的吧,比如SSL/TLS隧道加密、http2.0、异步mysql驱动、异步redis驱动、异步的http/websocket客户端、process、lock、atomic、table。另外Swoole 2.0内置了PHP原生协程的支持,PHP代码也可以使用类似于Go语言的协程来实现高并发的网络服务器。
外部依赖上workerman需要依赖很多额外的第三方PHP扩展来实现,局限性比较大,这些扩展并非是PHP官方维护的,维护性方面良莠不齐,有些扩展连PHP7都不支持,数年没人维护。而Swoole基本上无依赖,底层的代码全部可控。
开发维护方面,Swoole的开发团队目前有大概18人左右,开发者基本上都是来自腾讯、百度、阿里、滴滴、微博等国内一线互联网企业,支持维护的团队更稳定。
当然workerman的优势是它完全使用PHP代码实现,开发者可以直接看它的源码。有特殊需求也可以直接改源码来实现。如果换成swoole就不是那么简单了。workerman做的事情更多一些,即是框架又是工具和完整的解决方案,对于没有太多后端编程功底的程序员也来说确实会容易很多。而swoole实际上只是一个底层库,不是拿来可用的完整产品,基于swoole有很多PHP的框架和程序,比如tsf、zan php framework、hprose-swoole、zphp、swoole/framework、blink、dorarpc、SwooleDistributed等等,普通开发者可以直接基于这些项目进行开发。
Swoole是给高手用的,门槛比较高,需要使用者有深厚的功底。你这里问的哪个更容易开发,这个没办法回答,这个要看你要开发什么、团队或个人的实际情况如何,合适的才是最好的。
Workerman一方面开发遇到的难题没有Swoole多。越靠近底层面临的问题越多。Swoole要适配各种操作系统、不同版本的GCC和PHP,需要解决很多方面的问题。Swoole为了追求极致的性能,使用了C语言进行开发,难度比PHP要高不少。PHP语言的容错性也比C好,PHP里出现错误最多也就是Warning一下,C里直接段错误了。Workerman复用了libevent、pcntl等扩展,解决了很大一部分问题。第二Workerman提供的特性和功能也没有Swoole多,比较好控制。
swoole是C语言开发的扩展框架,由于有着C语言的优势,swoole在内存管理、数据结构、通信协议解析明显优势于workerman,而且swoole在目前通信协议,提供更高级的通信功能,所以workerman能开发的,swoole都可以,而且功能更多,速度更快,多年的发展稳定性强。swoole也有自己的缺点,不能根据自己需要开发,而且需要PHP程序员了解底层通信服务开发,需要学习的知识比较多,swoole一般适合老手开发。
workerman是纯PHP编程语言开发,在需要的时候可以根据需求二次开发,workerman不需要了解太多通信服务,底层框架也不用学习,更不用借助PHP环境开发,可以独立运行,workerman提供完整的通信协议框架,也可以自定义开发协议,所以workerman比较适合新手PHP程序员,workerman资料文档相对来说比swoole多。workerman缺点是需要安装扩展类比较多,在高并发性能,稳定性比不上swoole。
---
原文
- https://www.zhihu.com/question/47994137?from=profile_question_card
- https://segmentfault.com/q/1010000007046499
- https://baijiahao.baidu.com/s?id=1608873823322214852&wfr=spider&for=pc