对于 Notadd 我们本来期望它实现更多... 
尽管我们也尝试做了很多努力,但是由于 PHP 本身的局限,以及考虑到开发环境配置的复杂程度,最终使用了折中方案。
接下来,我们谈谈整个技术选型历程,也供今后相关开发者做借鉴和参考:

起因

我们期望 Notadd 不仅能应用到 web 领域,在嵌入式开发领域也能有所应用,同时能够使用常用的 websocket 协议。

Swoole

swoole 是我们考虑的首选方案,但从扩展性来说,难以符合我们模块化的要求,对 HTTPS 和 HTTP2 支持不够完善,同时,安装上也难倒一些 phper。在 ARM 板的安装过于复杂。当然也有好的一点,2.0 的自动异步对并发量有不少提升。

workerman

主要问题还在于 workerman 对 HTTP2 等协议支持不够完善,同时 phpsocket.io 只支持服务端模式运行,MQTT 协议也没有相应的实现,而且以 ThinkPHP 开发者居多,成本较高。

AmPHP

amphp 有着最全的协议支持,同时有各种非阻塞拓展,可以说是最符合要求的,但是异步需要对 laravel 做很大的改动。

ReactPHP

ReactPHP 实现上足够优雅,但问题也足够多,并且 PHP-cli 本身报错机制不完善,给调试带来了很大困难。

PHP-PM

按照官方说明,几乎不需要大的修改,就能将 PHP 的并发量提升 10 倍。但是在测试过程中,无法正常运行 Laravel ,所以也只能放弃~

1.0 后续的计划

1.0 还将是 PHP 版本,并且也会有后续的更新,但会取消一些过于激进的更新,目前来说,Notadd 的门槛已经足够高。
在上线应用商店后,也将会提供 1.0 ( PHP ) 的安装包。包括之前一些比较激进的改动,也会根据开发者投票进行取舍。
当然,商城等模块依然会提供。

2.0 的计划

Notadd 2.0 将基于 Nodejs 开发,同时也提供一些 1.0 无法提供的功能和特性。

为什么是 nodeJS?

  1. 性能: 在 IO 密集型运算中,由于异步非阻塞机制,NodeJS 可以轻松实现单机 5W 并发,而 Laravel 只有 200。
  2. 方便:NodeJS 可以很方便地安装拓展,而 PHP 需要 pecl 或者 phpize 甚至重新编译,这对很多就不怎么熟悉环境部署的 PHPer 来说简直就是噩梦。
  3. 简单: 在 ARM 环境下只需要 Node 就够了,不再需要 Nginx 或者 Apache,而 PHP 内置的服务器只适合用于调试。
  4. 拓展:NodeJS 本身提供了很多针对于系统层的操作,另外,npmjs.org 上也有足够多的包来使用,这对后期的拓展来说,无疑方便了很多。

为什么是 nest.js ?

不论是 express ThinkJS KOA EGG 都无法单一满足于中大型项目的开发,目录结构也会极其复杂,而借鉴 spring 思想的 nest.js 来说无疑是最适合的,并且方便 Laravel 开发者过渡。第九影院nest 默认使用 typescript ~

为什么不直接用 Go 或者 JAVA?

说到底是开发成本原因,并且这些语言在 IO 密集型优势并不明显,只有 10-20% 差异,但是在开发效率上就差了很多,而且对于企业,招人也是问题。

Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]的更多相关文章

  1. Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch(1)

    继PHP.Ruby.Python和Perl之后,Elasticsearch最近发布了Elasticsearch.js,Elasticsearch的JavaScript客户端库.可以在Node.js和浏 ...

  2. Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch

    继PHP.Ruby.Python和Perl之后,Elasticsearch最近发布了Elasticsearch.js,Elasticsearch的JavaScript客户端库.可以在Node.js和浏 ...

  3. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  4. AngularJS + Node.js + MongoDB开发

    AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...

  5. Ubuntu 14.04下搭建Node.js的开发环境

    最近想找一个轻量级且支持快速开发的服务开发平台,选来选去选择了Node.js,当时有几种选择: Python + Django(用过Django,虽然开发快速,但是感觉性能并不太好). Ruby + ...

  6. Mac下nvm管理node.js版本问题

    本篇文章主要是针对已经安装了node.js和nvm管理工具小伙伴遇到的问题. 管理工具有两个,一个是nvm,还有一个是nnvm的好处就是可以管理多个node版本,而且可以切换想要的版本,可以安装一个稳 ...

  7. 限定项目的 Node.js 版本

    限定项目运行所需的 Node.js 版本可保证项目在一个稳定可预期的环境中运行,减少不必要的故障.甚至有些依赖库只能工作于某些版本下.同时,不加以限制的话,在多人合作的项目中恐怕会引起环境不一致带来的 ...

  8. 利用n 升级工具升级Node.js版本及在mac环境下的坑

    一.利用n 升级Node.js 最近在用NPM安装一个nodejs工具时发现,我的nodejs的版本有些旧了.这不是大问题,只要升级就可以了,当然,重新从nodejs.org最新版本是一种方法,但我想 ...

  9. 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记

    近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...

  10. 使用nvm管理node.js版本以及更换npm淘宝镜像源

    目录 1,前言 2,安装nvm 3,nvm的使用 4,错误处理 5,修改npm默认镜像源 6,win10下cnpm报错 1,前言 注意:此教程仅限Windows,Mac可能不适用 在我们的日常开发中可 ...

随机推荐

  1. 真实场景中WebRTC 用到的服务 STUN, TURN 和 signaling

    FQ收录转自:WebRTC in the real world: STUN, TURN and signaling WebRTC enables peer to peer communication. ...

  2. java Vamei快速教程15 IO基础

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机最重要的功能是处理数据.一个有用的计算机语言需要拥有良好的IO功能,以便让未 ...

  3. java Vamei快速教程09 类数据和类方法

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们一直是为了产生对象而定义类(class)的.对象是具有功能的实体,而类是对象的 ...

  4. EF写统计

    EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联, 在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计, 例如SQL: -- ...

  5. Codeforces Round #327 (Div. 2) C Median Smoothing(找规律)

    分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为 ...

  6. UVALive 4727 Jump(约瑟夫环,递推)

    分析: 如果问题是要求最后一个删除的数,重新编号为0到n-1,f[n]表示答案,那么f[n] = (f[n-1]+k)%n. 因为删掉下标k-1以后可以从下标k重新编号为0. 在这个问题只需要推出最后 ...

  7. noip模拟赛#24

    这套题我只会写第二题...我... T1:给出一个含有向边和无向边的混合图,如何确定无向边的方向使得图中不存在环.保证有解.多解情况输出任意解. =>我往最大流的残量网络的方向去想了...因为混 ...

  8. mongodb索引 全文索引之相似度查询

    我们在百度搜索中,可以看到与自己搜索度内容越相关度,排在越前面,这个需求可以在mongodb中很简单度实现,mongodb的全文索引不仅可以返回相匹配的查询结果,而且可以告诉你查询结果与你的查询条件多 ...

  9. Ribbon 负载均衡搭建

    本机IP为  192.168.1.102 1.   新建Maven  项目    ribbon 2.   pom.xml <project xmlns="http://maven.ap ...

  10. jstree前端设置默认选中项

    $("#jstree").on("loaded.jstree", function (event, data) { var currDeptId = crm.g ...