【Node.js】利用进程通信实现Cluster共享内存

Node.js的标准API没有提供进程共享内存,然而通过IPC接口的send方法和对message事件的监听,就可以实现一个多进程之间的协同机制,通过通信来操作共享内存。

IPC的基本用法:

// worker进程 发送消息
process.send(‘读取共享内存’);

// master进程 接收消息 -> 处理 -> 发送回信
cluster.on('online', function (worker) {
     // 有worker进程建立,即开始监听message事件
     worker.on(‘message’, function(data) {
          // 处理来自worker的请求
          // 回传结果
          worker.send(‘result')
     });
});

在Node.js中,通过send和on(‘message’, callback)实现的IPC通信有几个特点。首先,master和worker之间可以互相通信,而各个worker之间不能直接通信,但是worker之间可以通过master转发实现间接通信。另外,通过send方法传递的数据,会先被JSON.stringify处理后再传递,接收后会再用JSON.parse解析。所以Buffer对象传递后会变成数组,而function则无法直接传递。反过来说,就是可以直接传递除了buffer和function之外的所有数据类型(已经很强大了,而且buffer和function也可以用变通的方法实现传递)。

基于以上特点,我们可以设计一个通过IPC来共享内存的方案:

Continue reading

V8安装

step.1 从SVN下载代码

svn checkout http://v8.googlecode.com/svn/trunk/ v8 && cd v8 

step.2 安装依赖

make dependencies 

step.3 编译

make native mode=debug library=shared snapshot=on

如果出现缺/usr/lib/等目录缺少文件的错误,到out/native下找相应的文件copy过去

step.4 Hello, world!

参考官方的helloworld代码:https://developers.google.com/v8/get_started

编译程序:

g++ -I../../include helloworld.cc -o helloworld -lpthread -lv

基于JavaScript的视图模板和数据绑定(3)Handlebars.js & Ember.js

目前很多类库和框架都已经实现了精细化的模板解析和渲染,这里先看一下Handlebars.js和Ember.js的组合。

Handlebars是目前最流行的模板引擎之一,和其他引擎相比,Handlebars的语法比较简单,而且有足够的扩展能力。

Continue reading

基于JavaScript的视图模板和数据绑定(2)JS模板

还是前面的例子,继续扩展。假设要在24个时区的时钟下面增加一个表格,显示北京机场离港航班的时刻表,这里限制一下表格长度为100行,每行显示一架航班的航班号、目的地、起飞时间、登机状态等10个字段,这样的页面就比单纯的24个时钟要有价值了,当然实现方法也变得复杂起来。

Continue reading

基于JavaScript的视图模板和数据绑定(1)简单绑定

先看一个例子:

<p id="clock"></p>

假设要在<p>标签内显示当前时间,并且实时更新,那么脚本可以这样写:

var clock = document.getElementById('clock');
setInterval(function(){
  clock.innerHTML = new Date();
}, 1000);

这是一个非常简陋的时钟效果,但是在代码中,p#clock元素的innerHTML值和当前时间绑定在了一起,时间数值更新,视图节点的innerHTML值随之更新,从而构成了一个很基础的视图和数据的绑定。

Continue reading

HTML5 Canvas的事件处理

DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行操作。比如有一个<path id="p1">元素,可以直接用jquery增加click事件$('#p1').click(function(){…})"。然而这种DOM处理方法在HTML5的Canvas里不再适用,Canvas使用的是另外一套机制,无论在Canvas上绘制多少图形,Canvas都是一个整体,图形本身实际都是Canvas的一部分,不可单独获取,所以也就无法直接给某个图形增加JavaScript事件。

Continue reading