简单地说,零秒也是一个使用 JavaScript 作为后台脚本的应用引擎,目前功能偏重于实时数据交换,简单地说,和 NodeJs 有如下不同:
(1)内置多线程和集群运行功能。 (2)交互方式同时支持同步和异步。 (3)内置内存数据库。 (4)主要功能用 C/C++ 开发,尽量让后台 Js 执行业务功能,提升效率。
网址在此:
此引擎完全由 C/C++ 开发,代码远远多于 NodeJs(十倍以上),发布到这里是为了给各位 NodeJs 的朋友提供另外一种解决问题的思路,也征求一下有没有对此感兴趣的同好。
这玩艺的文档还在奋力书写中…
还有编程示例这些。正在写数据实时推送(比如股票),还有聊天室这样的应用。我尽量把这些例子写得实用化一些,可以分布到集群上,支持大并发应用这样的。
有什么问题或者要求都可以提出来,或者在这里留言,或者去那边的网站留言都行。
很好很强大,把集群和RPC集成在一起貌似很方便列
有github代码库么?
谢谢,我们也是准备做成一个“傻瓜式” 平台,让开发者专注于业务逻辑,而不是纠结与技术细节。
不好意思,条件所限,目前只能打包下载。
看起来蛮先进,实时是个什么概念?
感觉非常先进,支持一下!
其内核是一个经典的实时系统内核,我想起未来的主要用途也是用于一些实时(或者说准实时应用)。
有货!粗看一下,前端只能 WebSocket 么?
其实可以用 HTTP 来交互,但是目前功能没有挂钩,而且我个人觉得 WebSocket + JSON 方便得很。
更新实时数据推送示例 http://www.zering.net/?p=193
强悍!!
@ZERING 能处理二进制内容也是很重要的,不知道"零秒"服务端有没有像 Nodejs 中 Buffer之类的接口可用?
@myy 我倾向于用 C 来处理二进制内容,js 处理二进制是个好主意么? 主要用于什么场景,我也很想向诸位学习,看看怎么改进这个系统,应该加入什么接口?请详细说说。
@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做实时的聊天室什么的,总之感觉比较自由。
@myy 就我个人的了解,NodeJs 只是在 V8 上简单地包裹了一层,代码不算太复杂,强项在于社区比较完善,有大量的第三方的包。Buffer 其实就是在 V8 的类型上包裹了一层。
关于定位,我想 “零秒” 的做法是尽量把后台的开发过程“傻瓜化”,让开发尽可能简单。 就功能而言,实时搜索,结构化数据的实时分发,实时交易会是重点。 我们希望让有前端开发经验的人很简单就能上手,用最简单的步骤就能完成后台的开发。 拿 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…例子太多了,大型软件系统最后几乎都往这个路子上走。
当然我不否认,专注于某一个特定领域做到极致,也是一种很好的思路。
其实现在方向都说不太好,还要看风向怎么吹。V8 不支持多线程运行一度让我们团队非常苦恼,幸好去年某个版本终于解决问题了。还有 WebSocket 协议,也才稳定不久。
我个人是非常看好 js 在后台应用的。我个人的愿景就是结合 C 的快速和 js 的灵活,尘归尘,土归土。
值得一提的是,零秒是原生的多线程系统,可以有效利用多核处理器的能力,还可以利用 API 在同一个节点共享一个强大的内存数据库系统(现在介绍得还太少)。
NodeJs 据我所知,现在还是要靠多进程才能实现并发运行,不知道这些进程之间如何实现内存数据共享?
更新了版本,新版本为 9.2.2 ,并新增了一个数据发布实例,采用了广播组和集群运行模式。
强,,,坚持楼主。。。
@ZERING 同志,不是代码简单就一定是垃圾,代码复杂一定就怎么怎么地。你以为python是怎么火起来的?
最重要的是对linux提供良好的支持 估计严肃的公司很少有用windows跑nodejs的吧
呵呵,中国特色
高级货…膜拜
新加入了一个实时检索模块,采用了创新的数据流检索技术,可以对最新的信息进行实时检索和推送,速度飞快。结合 HTML5 的 WebSocket 是处理类似微博客这类段文本检索的最佳方式。
正在开发的有一个模块叫做 VCN (虚拟呼叫结点),预计可以对 WebRTC 提供较好支持,其呼叫处理功能十分强大,性能出众。
欢迎各位访问并提出意见。
系统本身有操作系统抽象层,包括内存,并发处理这些都是自己管起来的。系统本身的 C/C++ 很纯净,不客气地说,就是移植到 VxWorks 这样的系统上仍然没什么问题。
目前采用 Windows 平台算是个偷懒的方式,因为 Visual Studio 平台开发和调试都很方便,目前系统还处在早期开发阶段,人手有限,没必要开发这么多版本。
而且目前桌面端还是 Windows 为主,如果有任何人想评估这个系统的话,Windows 版本就够了。
等到有一定人气,或者有人要很正式地使用这个系统的话,我们可以提供 Linux,包括 FreeBSD,甚至 OSX 这样的版本都没有问题。
有任何疑问欢迎提出,我们也好知道需要在文档中增加什么说明。