阿肆 发布的文章

本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨。

Node.js的HTTP服务器

使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

这样就快速的搭建了一个监听在1337端口所有http请求的web服务。
但是,在真正的生产环境中,我们一般很少直接使用Node.js作为面向用户的最前端web服务器,原因主要有以下几种:

  • 基于Node.js单线程特性的原因,其健壮性的保证对开发人员要求比较高。
  • 服务器上可能已有其他http服务已占用80端口,而非80端口的web服务对用户显然不够友好。
  • Node.js对文件IO处理并没太大优势,如作为常规网站可能需同时响应图片等文件资源。
  • 分布式负载场景也是一个挑战。

所以,使用Node.js作为web服务更多可能是作为游戏服务器接口等类似场景,大多是处理不需用户直接访问且仅作数据交换的服务。

基于Nginx作为前端机的Node.js web服务

基于上述原因,如果是使用Node.js搭建的网站形的产品,常规的使用方式是在Node.js的web服务前端放置另一个成熟的http服务器,如最常使用的是Nginx。
然后使用Nginx作为反向代理访问基于Node.js的web服务。如:

server{
    listen 80;
    server_name yekai.me;
    root /home/andy/wwwroot/yekai;

    location / {
        proxy_pass http://127.0.0.1:1337;
    }

    location ~ \.(gif|jpg|png|swf|ico|css|js)$ {
        root /home/andy/wwwroot/yekai/static;
    }
}

这样就比较好的解决了上面提出的几个问题。

使用FastCGI协议通讯

- 阅读剩余部分 -

首先看一段示例代码:
<div id="wrap">
<script type="text/javascript">
        document.write('<\!--');
</script>
<iframe src="xxx.html" frameborder="0" scrolling="no" width="320" height="384"></iframe>
<!-- DO NOT DELETE -->
</div>
<script type="text/javascript">
//xxx scroll、resize等条件执行下面滴
Ajax.get('xxx.php', function(ret){$('#wrap').html(ret)});
</script>

使用场景是这样的:就是页面在往下拖到一定距离滴时候会动态出来一块内容,但是为了保证不支持javascript的浏览器也能正常看到这块内容,需要做兼容处理。
可能有同学会说为啥不直接<noscript>搞定?是因为我们发现在中国这个奇葩环境下,我们的部分用户不是不支持js,而是jscript.dll等文件被破坏导致出现js支持但是解析不了的情况,所以出现了上面这个奇怪滴解决方案。
主要思路就是用js write出来html注释,使在js正常的情况下html代码不解析,然后使用正常的html注释的方式来关闭js写出来的注释(注意这里的注释开始符会被当做js写出来的注释的注释主体)使后续的html代码能正常解析。
不过,这样滴代码毕竟不是良好的代码风格,如果在项目中有使用html压缩等需要单独给功能形注释取消压缩,就如IE条件注释一样。

树莓派(Raspberry Pi)是啥?树莓派有啥用?清参考wikipedia上树莓派条目。
入手玩了几天,网上也有一大堆使用树莓派开发的各种好玩的东东(比如这个这个这个)。
其实,借助树莓派来实现一些好玩的玩意是非常方便和简单的,因为他提供了GPIO引脚可用来做硬件控制开发。更方便的是他能非常方便支持各种语言来驱动(理论上应该是能在linux环境下支持文件操作的语言都行),比如python(这也是官方推荐语言)、php和js。
举个例子,如何使用nodejs如何通过树莓派上的gpio控制步进电机呢。首先步进电机是需要驱动器的,这个可以在网上买到现成的模块。以5线4相为例,我们只需要依次给驱动板4个IN端高电平就行了,其实逻辑就像前端页面中最简单的switch组件实现啦(友情提示下,因为读写gpio都是异步操作且相对低效所以尽量自己实现状态管理避免过多读写gpio操作)。其他的如直流电机、二极管、继电器、各种传感器等更少I/O口的就更简单控制了。
我实现的一个封装见:pi-moto,以及视频演示
同时,网上看到有些朋友在询问如何在国内购买到树莓派。我是在element14购买的,大概一周的样子就到了。步进电机驱动模块可以直接在淘宝搜ULN2003芯片应该就能出来一堆了。

一个电影资源的综合工具。为链接和选正文字添加右键到豆瓣、迅雷离线下载、qq旋风离线下载、射手网字幕等功能。也可以自定义其他网站搜索。添加豆瓣页面上直接在线观看及下载链接。

Chrome Web Store安装