如何理解NodeJS(一)基本原理、优势、劣势等
Comments
tags:Javascript, NodeJS
如何理解NodeJS (一)基本原理、优势、劣势等 用NodeJS相关技术作为项目的主平台开发已一年有余,写个小文章谈一下如何更好的理解NodeJS。 要理解NodeJS,就必须看看它和其他的Java,C#写的服务器有何不同。 如果你Google一下的话,就会发现很多类似这样的文章:w/1M concurrent connections! 或者这样的:600k concurrent websocket. 而Java服务器,在没有用任何工具的情况下大概一个服务器能撑500-1000个并发。(除非上和NodeJS原理相似的netty) 为什么NodeJS能在默认单线程的情况下实现如此高的并发呢?这和NodeJS的三大特点: Single threaded Event Loop Non-blocking I/O 是分不开的。 举个具体的比喻:我们传统的程序处理方式就和去银行办事情一样,我们手里拿着几件要办的事情来到银行。从门口的机器里面拿到一个号,一般有多个窗口在办业务(多线程),当叫到我们的号时,我们去特定的窗口把我们要办的事情都办完(阻塞性),然后下一个人。如下图: (一家拥有3个柜台/服务员的银行) 现在,更高效的NodeJS银行开张了,去里面办事是一种什么体验呢?…
为什么你不应该使用Lombok
Comments
tags:技术, Java
先科普下Lombok,一个第三方的Java字节修改库,用来帮助你自动生成一些“冗余”代码的工具。(在此请允许我吐槽下这个官方网站浓浓的山寨VB程序页面) Java,作为流行的编程语言。最受人诟病的一个缺点,就是“罗嗦”。相比动态语言,变量要先定义,类型要先定义,每个类要写很多的get/set/toString/hashCode等等方法。为了避免写这些“罗嗦”的方法,好多程序员一直在到处寻找一个能够使他们摆脱这些烦的事情的工具,比如今天我要谈论的这个Lombok,就被认为是一个处理这方面的好工具。 然而我却并不这么认为。 先来了解下Lombok的工作原理吧。由于Java的官方版本没有提供这种“便利”的工具。而类似Lombok的工具都是使用了从Java 6和JSR 269的Annotation Processing技术。 但是这个新特性的本意是只能用来根据Annotation生成新的代码(或者文档),而不是用来修改现有的代码的。Lombok是怎么做的呢?根据官方的文档: 使用非公开的API,在知道在javac编译代码时,annotation processor的实例一定是JavacAnnotationProcessor(接口AnnotationProcessor的内部实现),直接使用强制类型转换cast。再从JavacAnnotationProcessor的方法里面拿到抽象语法树(AST)做修改。 接着看看大家认为的最大好处: 省代码,省很多的代码…
Reactive Programming介绍(2)
Comments
tags:技术
从旧博客上转移文章: 目录: 什么是响应式编程(1) 使用响应式编程思考的例子(2) 使用RP思考,例子 让我们做些实际的事情,用一个真实世界的例子(而不是半成品的概念),一步一步指导你如何响应式的思考。在这个教程的最后,我们会构建一个真实可运行的代码,同时彻底了解这些代码背后的思想。 我选择了JavaScript和RxJS库来作为这个例子的语言和工具,原因是JS是我当前手上正在使用的语言,而Rx*家族的库在很多语言上都有(.net, Java, Scala, ...),无论你是用那个具体语言的库,你都能从这个教程里收益。 开发“Who to follow”推荐模块 在Twitter里你会看到如下的推荐关注人的小模块: 我们接下来将关注实现它的核心功能: 初始化时,通过API读取账户数据,并显示3个作为推荐列表 点“刷新”时,读取3个新的账户显示在推荐列表中 当点击某个账户的右上角‘x’时,只清除这个账户,然后显示一个新的 每行显示用户的头像和链接 我们可以忽略界面上的其他所有按钮和链接。并且,由于twitter最近关闭了他的用户数据API,我们的UI将基于Github的用户信息。接口定义在这里。 教程的完整代码在这里,…
Reactive Programming介绍(1)
Comments
tags:技术
从旧博客上转移文章: 一篇不错的理解响应式编程的入门文章。个人把它分成2部分,慢慢翻译。 目录: 什么是响应式编程(1) 使用响应式编程思考的例子(2) 你不能错过的响应式编程(Reactive Programming)介绍 你可能对学习响应式编程这种新兴事物感兴趣,尤其当它的变种包括了Rx,Bacon.js,RAC等听说过的库。 学习它非常困难,尤其当没有好的入门材料的时候。当我开始的时候,我曾尝试寻找入门教程。我发现只有屈指可数的实际指导资料,而且大部都分只是抓痒,从没有解决如果围绕响应式编程创建完整架构的挑战。相关类库的文档经常毫无意义当你试图理解某些功能的时候。我是指,诚实的说,像下面这个文档: Rx.Observable.prototype.flatMapLatest(selector, [thisArg]) Projects each element of an observable sequence into a new sequence of observable sequences by…
Angular2的NGINX配置
Comments
tags:技术
现代的浏览器已经支持HTML5的history.pushState,一种支持改变浏览器地址栏和历史而不发送实际服务器请求的技术。 记得以前的SPA(Single Page Application)应用是怎么做的么?在angular1里面,你会看到类似下面的地址: http://localhost:8000/home/#/login 这里用了标记#来告诉浏览器,我这个不是真实的地址,不要试图去服务器上查这个请求。 现在我们不需要这么做了,使用HTML5支持的浏览器,直接地址栏里面看到的结果就是: http://localhost:8000/home/login 是不是很赞?so far so good,直到你在你的nodejs服务器前面加了nginx。。。 一开始,看起来所有的东西都work,你的nginx配置可能如下: server { listen 80 default_server; server_name your.server.com; root /root/www; error_…