摘要:有着最全的协议支持,同时有各种非阻塞拓展,可以说是最符合要求的,但是异步需要对做很大的改动。的计划将基于开发,同时也提供一些无法提供的功能和特性。
一点小遗憾
对于 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 ) 的安装包。包括之前一些比较激进的改动,也会根据开发者投票进行取舍。
当然,商城等模块依然会提供。
Notadd 2.0 将基于 Nodejs 开发,同时也提供一些 1.0 无法提供的功能和特性。
为什么是 nodeJS?
性能: 在 IO 密集型运算中,由于异步非阻塞机制,NodeJS 可以轻松实现单机 5W 并发,而 Laravel 只有 200。
方便:NodeJS 可以很方便地安装拓展,而 PHP 需要 pecl 或者 phpize 甚至重新编译,这对很多就不怎么熟悉环境部署的 PHPer 来说简直就是噩梦。
简单: 在 ARM 环境下只需要 Node 就够了,不再需要 Nginx 或者 Apache,而 PHP 内置的服务器只适合用于调试。
拓展:NodeJS 本身提供了很多针对于系统层的操作,另外,npmjs.org 上也有足够多的包来使用,这对后期的拓展来说,无疑方便了很多。
为什么是 nest.js ?
不论是 express ThinkJS KOA EGG 都无法单一满足于中大型项目的开发,目录结构也会极其复杂,而借鉴 spring 思想的 nest.js 来说无疑是最适合的,并且方便 Laravel 开发者过渡。nest 默认使用 typescript ~
为什么不直接用 Go 或者 JAVA?
说到底是开发成本原因,并且这些语言在 IO 密集型优势并不明显,只有 10-20% 差异,但是在开发效率上就差了很多,而且对于企业,招人也是问题。
开源地址https://github.com/notadd/notadd
https://gitee.com/notadd/notadd
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26228.html
摘要:快速开始下载码云高速下载安装执行包安装,如无,请先执行自动创建数据库配置必须使用必须使用必须使用运行更新月报年月年月年月年月年月年月年月年月年月下载地址码云一点说明月将发布用户中心模块和模块,月月后续还会有商城模块微信模块 前言 大多数 node.js 框架都没解决架构问题,使得 node.js 没能像 spring 一样的适合大型项目开发和维护的框架。 nest.js 出现改变了这种...
摘要:另外,团队更加友好的类型检查极大方便了后端的开发。初步的性能测试无读写操作的接口响应时间在本地,读写操作接口响应时间在,已经远低于之前版本的。并发量预估也会有不小的提升。 2.0-alpha1 预览版本 这个版本主要用于预览后台,一些接口还没对接。 Adonis.js 到 Nest.js AonisJS 是一个 Node.js 版的 Laravel ,起初是打算用 AdonisJS,...
摘要:其中定义了一些命令,还记得我们初始化项目完成后执行其实就是执行简单的来说是运行时依赖生产环境,是开发时的依赖开发环境相应的在安装包时,有两种命令参数可以把它们的信息写入文件,会把依赖包名称添加到文件键下,则添加到文件键下。 这次主要是记录下自己在做vue-cli +webpack +vue-router 的经历 以及一些踩过的坑,算是做一个简单的总结 一.vue的基本介绍 1)渐进式的...
摘要:前言都到了,所以是时候玩转一下的新特性了。安装的包名称由改成了。方法一原因的配置改变了,导致正确的不能用。打开终端,切换到根路径文件里面修改为方法二是默认路径修改了路径会出现错误。按上面的方法修改完,再全局卸载果然就成功了。 showImg(https://segmentfault.com/img/remote/1460000016423946); 前言 vue-cli 都到 3.0....
摘要:目前常见的协议版本号为和,两个协议不完全兼容。第一坑基于开发的非常少,大部分是商业的,售价不菲。端存储的格式如下这个就比较有意思了,是可以自己维护一个存储层级。不但配置繁琐复杂,还会受到各种权限以及防火墙规则的影响。 最近一个项目中需要用到OPC client,从OPC Server中获取数据。主要的编程语言使用Java实现。实际开发中遇到了各种坑,其实也和自己没有这方面的经验有关,现...
阅读 1323·2021-09-10 10:51
阅读 2805·2019-08-30 15:54
阅读 3302·2019-08-29 17:11
阅读 887·2019-08-29 16:44
阅读 1372·2019-08-29 13:47
阅读 1057·2019-08-29 13:47
阅读 1458·2019-08-29 12:23
阅读 1009·2019-08-28 18:18