简单地说,零秒也是一个使用 JavaScript 作为后台脚本的应用引擎,目前功能偏重于实时数据交换,简单地说,和 NodeJs 有如下不同:
(1)内置多线程和集群运行功能。 (2)交互方式同时支持同步和异步。 (3)内置内存数据库。 (4)主要功能用 C/C++ 开发,尽量让后台 Js 执行业务功能,提升效率。
网址在此:
此引擎完全由 C/C++ 开发,代码远远多于 NodeJs(十倍以上),发布到这里是为了给各位 NodeJs 的朋友提供另外一种解决问题的思路,也征求一下有没有对此感兴趣的同好。
这玩艺的文档还在奋力书写中…
还有编程示例这些。正在写数据实时推送(比如股票),还有聊天室这样的应用。我尽量把这些例子写得实用化一些,可以分布到集群上,支持大并发应用这样的。
有什么问题或者要求都可以提出来,或者在这里留言,或者去那边的网站留言都行。
@myy 说起来 Google V8 里面的确有一种特殊的数据类型,可以“包裹”一个 C 的指针,js 可以引用这个变量,但是无法使用。只能在特定的 C 的 API 之间传来传去。不知道你说的是不是这样的功能。用指针索引一片内存块,然后用特定的 API 去解析,让 JS 具有一定的操纵 2进制数据的能力?
@myy 不知道有没有什么一些有趣的需求?比如对一片数据区进行加密解密? DES/AES ? BASE64 转换?写入文件?数据库? 或者别的什么?如果有兴趣我们是可以加上的,在 C/C++ 这个层次,模块都是有的。就是我们也不太确定开发者需要什么接口更方便?
@ZERING 是的,“包裹”一个 C 的指针在特定的 C 的 API 之间传来传去,Buffer就是干这个的,不过它是NodeJS 中的类型,不是V8的
二进制处理方面,比如数据压缩,加解密,图像输出,还有做一些数据库访问的驱动等,虽然一般不用js直接处理,但作为C模块的“胶水”,没有这个js还真不好处理。
@ZERING “就是我们也不太确定开发者需要什么接口更方便?”
这个还真不好说,个人观点,不同层次的开发者,或不同类型的系统有各种不同的需求,太方便有时候就是不灵活,不高效,想灵活高效就只能走底层,自然没那么方便了。
NodeJS 现在走的就是各种大众语言的路子,语言js + 高效的V8引擎 + 丰富的库,这些库能用js就用js,追求效率就用 C++,我最近就顺便研究了一下NodeJS C++扩展编写,觉得还是比较简单的,不知道 “零秒” 在这方面有什么体现?
@ZERING 当然了,可能“零秒” 与NodeJS 的定位不太一样,我觉得,NodeJS其实在力求通用化,它不太限定应用的场景,比如你可以拿他写 Web server,代理服务器,爬虫,当然也可以结合WebSocket做实时的聊天室什么的,总之感觉比较自由。
关于定位,我想 “零秒” 的做法是尽量把后台的开发过程“傻瓜化”,让开发尽可能简单。 就功能而言,实时搜索,结构化数据的实时分发,实时交易会是重点。 我们希望让有前端开发经验的人很简单就能上手,用最简单的步骤就能完成后台的开发。 拿 WebServer 来说,我个人觉得自己去实现就没什么太大意思了。 “零秒” 会提供一个给你,我们提供的这玩艺肯定不会合所有人的意,但是对于 90% 的应用来说足够了。对于绝大多数的开发人员来说,集中精力于业务流程才是当务之急。 能玩 NodeJs 的,都是有两把刷子的,但是这类人员的可获得性就不会很好,有本事的人总是少数,而且工资不会低。
关于“零秒”系统 C 和 JS 如何分工,我想用“搬动道岔” 来做比方,js 来做“列车调度员” 比较合适,处理业务逻辑,用起来实在是方便得很,但效率毕竟还是弱。尤其是动态的内存分配和回收,在某些情况下会非影响效率。
我前面那个实时数据发布的例子,效率并不高,用一个 js 的循环来进行数据广播,几十个上百个问题不大,但如果客户端上万或者再高,就很麻烦了。
我下面将要写一个例子讲如何使用“零秒”系统的“广播” 功能,js 所要做的只是把某个连接加入某一个“广播组” 中,然后向这个组发送消息,广播的事情,连接维护这些,C 模块自己就做了。
在我们的结构中,系统功能是分层次的,比如 HttpConnector 这个模块会定时向 WS 客户端发送 PING 包。按照 RFC 6455,WS 的 EndPoint 必须回一个 PONG 包,如果超时未收到,模块就会自动关断连接。
按照我们的理解,这些活动 JS 脚本根本无需参与,费力不讨好,顶多关闭连接的时候告知一下原因就行了。
所以我觉得“零秒”系统的定位和NodeJS不太一样嘛,是不太好比较。
一个强大的底层引擎,总是需要一个相对高级灵活的“脚本言语”,比如Oracle数据库有sql, pl/sql,虽然你可以用C/C++写Oracle的扩展,再怎么也比不上写pl/sql存储过程方便,再比如HTML5的浏览器很强吧,音频、视屏、2D、3D、…但还是需要js,甚至层出不穷的js库,还有 MSOffice 中的 VBA…例子太多了,大型软件系统最后几乎都往这个路子上走。
当然我不否认,专注于某一个特定领域做到极致,也是一种很好的思路。
值得一提的是,零秒是原生的多线程系统,可以有效利用多核处理器的能力,还可以利用 API 在同一个节点共享一个强大的内存数据库系统(现在介绍得还太少)。
NodeJs 据我所知,现在还是要靠多进程才能实现并发运行,不知道这些进程之间如何实现内存数据共享?
新加入了一个实时检索模块,采用了创新的数据流检索技术,可以对最新的信息进行实时检索和推送,速度飞快。结合 HTML5 的 WebSocket 是处理类似微博客这类段文本检索的最佳方式。
正在开发的有一个模块叫做 VCN (虚拟呼叫结点),预计可以对 WebRTC 提供较好支持,其呼叫处理功能十分强大,性能出众。
欢迎各位访问并提出意见。