在吐槽前要交待一下背景,我是一个PHPer,同时是一个node粉,node的出现让熟悉js的开发者们不需要再去学习一门新的语言,只需要掌握一些api就能开发后端应用,异步是node最核心的地方,这也使得他能在IO密集的服务器上充分发挥cpu的优势。当然任何一个产品都不是十全十美的,也有一些坑,熟悉了PHP同步开发的同学转到异步的各种callback也可能感觉不爽,但是总会有一些库来解决这些问题,所以在我看来,nodejs是一个非常不错的产品。好产品就会有人模仿,这是避免不了,但是总有一些人模仿了还要回头来骂!
swoole,一个号称重新定义PHP的扩展库,我到是想问问,你何得何能拿你的产品跟nodejs比?就因为你写了几个并发测试?拿个单进程跟一个多进程服务比,丢不丢人?别欺骗那些刚入道的PHPer好吗?就因为写了几个eventloop,加了几个task,worker就敢拿出来吹嘘高性能、异步多线程服务器?稍微会点c,懂点网络的谁特么不会写个eventloop?本来swoole的出现我觉得挺好,毕竟我本身也是一个PHPer,但是在swoole里面随处可见贬低我大node,作为一个node粉,我忍不了!你要写的扩展你就好好写你的扩展,为个鸡巴毛要排挤node?你以为你这样贬低,再加上几个胡乱的并发测试就能PHPer们认为你这是跨时代的产品了?什么比node强太多,什么node比起swoole完全没有优势。我到是想问问,你为作一个异步服务器,你解决了几个异步问题??PHP现在用的这么多软件,redis,memcache,mongodb哪一个你能支持异步??
还有这篇对比nodejs与swoole的文章更是操蛋http://rango.swoole.com/archives/311
1、多核并行,我不知道是你没看还是故意蒙蔽PHPer们,nodejs支持的cluster可以随便开关进程,多核对他来说,仅仅是process的一个小功能而已,而你非要把这个拿出来说,还说node不能发挥多核优势,那我只能呵呵了。还有提到的node不支持多线程,我到是想问一句,node为什么要支持多线程?多线程的程序就一定比多进程的程序性能高?难道我会告诉你他支持多进程reactor?你加了个多线程就觉得nodejs也应该有多线程?笑话。。还有swoole只有一个线程来accept,而nodejs可以多进程accept,用你的话来说,是不是nodejs比swoole强大太了呢??话说到这里,估计你又要开始拿惊群说事了,但是我要告诉你,你觉得以nodejs作者的能力解决不了惊群的问题吗??惊群不是任何时候都需要解决,作为一个长连接服务器,多数情况下是在处理逻辑,不会出现频繁的打开和关闭连接,所以出现惊群带来的性能损失是可以容忍的。如果是有频繁的打开和关闭连接,那恐怕就得改成http了,用Nginx就是一套成熟的解决方案,就更没swoole什么事了。
2、异步网络IO,这更没什么说的了,swoole里面需要支持的异步一定要在swoole里面加了才能用,比如现在支持的MysqL!但是如果我想用redis、mongo、memcache……更多的网络软件,,那要怎么办??swoole都给我加一遍好吗??node核心就是异步,只要是IO操作都能异步处理,这一点是swoole完全没办法比的!
3、异步文件读写,作为一个高性能的服务器,通常不会直接操作文件,都是对内存的数据进行读写,那么对异步文件读写的要求就没有那么高,所以node使用多线程与swoole使用aio并没有多大差异,作者把aio都搬了出来,看样也是真没什么有利武器来攻击node,只好出一些看上去很牛逼的奇招了!
最后的结束就更是操蛋了,居然说nodejs并没有明显优势!真是不知道天高地厚,谁给你的勇气?居然说什么定位是前后端紧密,适合轻量级的http...敢情node的最底层的net模块被吃了??在你眼里他就只是一个可以自定义的http server??
nodejs的进程处理,定时器,异步IO,http(c/s)你都成功模仿了几个?好好写的扩展,别一天没事就来黑我大node,你不配。
另外说一句,我就是在知乎上面喷你那位!说了两句口头禅就说我人生攻击(“你妹的”这算是人生攻击?),还让知乎删我的回复!
续上面吐槽之二:http://rango.swoole.com/archives/305
1、主线程ractor,首先swoole的源代码我没看,但是从这描述上看,是主线程接受请求,然后把fd传给其它线程来处理read,write事件!既然是这样,我想请问你哪里解决了惊群的问题?作者知道惊群的定义吗?拿个主线程来accept然后把fd转走,这叫解决了惊群?压根就没有惊群这个场景,何来解决??惊群是多个进程或者线程持有同一个fd,当fd可操作时部分进程或者线程会被唤醒!你这就主线程有listenfd的控制权,请问哪里来的惊群场景?这就好比你不用malloc然后说你解决了内存泄露,真是逗的一手好逼。
2、管理进程,这个更是操蛋了,身为一个PHPer,经常改完需要运行看到结果,好嘛!这尼玛写完还要去reload一下,果然是“提升”了开发效率!
3、异步ractor,ractor线程闲的扣脚,worker进程忙的吞粪的情况下,你ractor线程把数据读过来干什么?还尼玛不受影响,处理都来不及,接受再多数据有什么用??
4、同步和异步,这就更戏剧化了,我看作者是写的一手好hello world,一个庞大的系统里面又是同步,又是异步!光是写完估计就乱了,以后就别维护了!另外好像swoole除了能支持MysqL和文件异步,其它能有用的异步到是一个没见着。。还比node强太大!真要呵呵你个大呵呵了。