??xml version="1.0" encoding="utf-8" standalone="yes"?>色777狠狠狠综合伊人,国产成人亚洲精品,精品成人久久avhttp://www.aygfsteel.com/killme2008/category/48752.html生活、程序、未?/description>zh-cnWed, 10 Dec 2014 16:39:32 GMTWed, 10 Dec 2014 16:39:32 GMT60Another URL Shortener using NodeJShttp://www.aygfsteel.com/killme2008/archive/2012/11/25/391936.htmldennisdennisSun, 25 Nov 2012 12:31:00 GMThttp://www.aygfsteel.com/killme2008/archive/2012/11/25/391936.html
Is is written in NodeJS,using express.js for MVC framework,and using MySQL for storage and Redis for caching.

A demo online: http://fnil.me/

The project is at https://github.com/killme2008/node-shorten

Feel free to modify and use it.Have fun.

dennis 2012-11-25 20:31 发表评论
]]>
Zookeeper的web理应用http://www.aygfsteel.com/killme2008/archive/2011/06/06/351793.htmldennisdennisSun, 05 Jun 2011 17:13:00 GMThttp://www.aygfsteel.com/killme2008/archive/2011/06/06/351793.htmlhttp://www.aygfsteel.com/killme2008/comments/351793.htmlhttp://www.aygfsteel.com/killme2008/archive/2011/06/06/351793.html#Feedback2http://www.aygfsteel.com/killme2008/comments/commentRss/351793.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/351793.htmlhttps://github.com/killme2008/node-zookeeper

    我们已经开始在产品使用zookeeper了,那么l护工具也必焉要,所谓兵马未动,_草先行。请同事帮忙看过几个开源项目后Qƈ没有特别让h满意的?br />    我想要的功能比较单。首先,希望能将zookeeper集群的数据展CZؓ(f)?wi)Şl构Q跟zookeeper模型保持一致。可以逐步展开每层的节点,每次展开都是延迟加蝲从zk里取数据Q这样不?x)对zk造成太大压力。其ơ,除了展示?wi)Şl构外,我还希望它能展示每个path的属性和数据Q更q一步,如果数据是文本的Q我希望它可~辑。当Ӟ因ؓ(f)~辑功能是比较危险的行ؓ(f)Q我q希望这个管理工h个简单的授权验证机制?br />
    最l,我自己写了这么个东西Q取名ؓ(f)node-zk-browserQ基于node.js?a >express.js框架?a >node-zookeeper客户端实现的。我它攑֜了github?br />
    https://github.com/killme2008/node-zk-browser

    你可以自己搭个小appQ?npm几乎能帮你搞定大部分工作。界面不观Q实用ؓ(f)主,几张q行时截?br />








dennis 2011-06-06 01:13 发表评论
]]>
Node.js Undocumented(2)http://www.aygfsteel.com/killme2008/archive/2011/06/04/351744.htmldennisdennisSat, 04 Jun 2011 10:09:00 GMThttp://www.aygfsteel.com/killme2008/archive/2011/06/04/351744.htmlhttp://www.aygfsteel.com/killme2008/comments/351744.htmlhttp://www.aygfsteel.com/killme2008/archive/2011/06/04/351744.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/351744.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/351744.html    Node.js Undocumented(1)
    Node.js Undocumented(2)

    写这U系列blogQ是Z监督自己Q不然我估计我不?x)有动力写完。这一节,我将介绍下Bufferq个module。js本nҎ(gu)本友好,但是处理二进制数据就不是特别方便Q因此node.js提供了Buffer模块来帮助你处理二进制数据,毕竟node.js的定位在|络服务端,不能只对文本协议友好?br />
    Buffer模块本n其实没有多少未公开的方法,重要的方法都在文档里提到了,有两个方法稍微值的提下?br />
    Buffer.get(idx)

    跟buffer[idx]是一L(fng)Q返回的是第idx个字节,q回的结果是数字Q如果要转成字符Q用String.fromCharCode(code)卛_?br />
    Buffer.inspect()
    q回Buffer的字W串表示Q每个字节用十六q制表示Q当你调用console.dir的时候打印的是q个Ҏ(gu)q回的结果?br />
    Buffer真正值的一提的是它的内部实现。Buffer在node.js内部的cpp代码对应的是SlowBufferc(src/node_buffer.cc)Q但是两者之间ƈ不是一一对应?strong>对于创徏于8K的BufferQ其实是从一个pool里slice出来Q只有大?K的Buffer才是每次都new一个SlowBuffer。查看源码(lib/buffer.js)Q?span style="color: #000000;">
Buffer.poolSize = 8 * 1024;
    
if (this.length > Buffer.poolSize) {
      
// Big buffer, just alloc one.
      this.parent = new SlowBuffer(this.length);
      
this.offset = 0;

    } 
else {
      
// Small buffer.
      if (!pool || pool.length - pool.used < this.length) allocPool();
      
this.parent = pool;
      
this.offset = pool.used;
      pool.used 
+= this.length;
    }
 

    因此Q我们可以修改Buffer.poolSizeq个“静?#8221;变量来改变池的大?br />
    Buffer.poolSize
    Buffercd建的池大,大于此值则每次new一个SlowBufferQ否则从池中sliceq回一个BufferQ如果池剩余I间不够Q则新创Z个SlowBuffer做ؓ(f)池。下面的例子打印q个值ƈ修改?6K:
console.log(Buffer.poolSize);
Buffer.poolSize
=16*1024;

   SlowBufferc?/strong>
   SlowBuffercL们可以直接用的Q如果你不想使用Buffercȝ话,SlowBuffercLBuffer模块的所有方法实玎ͼ例子如下Q?br />
var SlowBuffer=require('buffer').SlowBuffer
var buf=new SlowBuffer(1024)
buf.write(
"hello",'utf-8');
console.log(buf.toString('utf
-8',0,5));
console.log(buf[
0]);
var sub=buf.slice(1,3);
console.log(sub.length);
   
    h意,SlowBuffer默认不是Global的,需要require buffer模块?br />
    使用和性能试

    Buffer的这个实现告诉我们,要用好Bufferc还是有讲究的,每次创徏于8K的Buffer最好大刚好能?k整除Q这栯充分利用I间Q或者每ơ创建大?K的BufferQƈ充分重用。我们来看一个性能试Q分别@?000万次创徏16K,4096?097大小的BufferQ看看耗时多少Q?br />
function benchmark(size,repeats){
    
var total=0;
    console.log(
"create %d size buffer for %d times",size,repeats);
    console.time(
"times");
    
for(var i=0;i<repeats;i++){
        total
+=new Buffer(size).length;
    }
    console.timeEnd(
"times");
}
var repeats=10000000;

console.log(
"warm up")
benchmark(
1024,repeats);
console.log(
"start benchmark")
benchmark(
16*1024,repeats);
benchmark(
4096,repeats);
benchmark(
4097,repeats);

    创徏1024的Buffer是ؓ(f)了做warm up。在我机器上的输出:(x)
    
start benchmark
create 
16384 size buffer for 10000000 times
times: 81973ms
create 
4096 size buffer for 10000000 times
times: 80452ms
create 
4097 size buffer for 10000000 times
times: 138364ms

  
    创徏4096和创?097大小的BufferQ只差了一个字节,耗时却相差非常大Qؓ(f)什么会(x)q样Q读者可以自己根据上面的介绍分析下,有兴的可以留言?br />    另外Q可以看到创?6K和创?K大小的BufferQ差距非常小Q^均每U钟都能创徏10万个以上的BufferQ这个效率已l以满绝大多数网l应用的需求?br />

dennis 2011-06-04 18:09 发表评论
]]>
node-leveldb的memcached adapterhttp://www.aygfsteel.com/killme2008/archive/2011/05/31/351447.htmldennisdennisTue, 31 May 2011 08:45:00 GMThttp://www.aygfsteel.com/killme2008/archive/2011/05/31/351447.htmlhttp://www.aygfsteel.com/killme2008/comments/351447.htmlhttp://www.aygfsteel.com/killme2008/archive/2011/05/31/351447.html#Feedback1http://www.aygfsteel.com/killme2008/comments/commentRss/351447.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/351447.htmlleveldb是google最q开源的一个实玎ͼ但是它仅是个libQ还需要包装才能用?a >node-leveldb是一个用node.js包装leveldb的项目,你可以用javascript讉Kleveldb?a >node-leveldb仅提供APIQ不提供|络接口供外部访问。我fork了个分支Q搞了个memcached的adapterQ将node-leveldb的API暴露为memcached的文本协议,q样一来你可以直接用现有的memcached client甚至直接telnet上去q行试。感兴趣的朋友可以测试下。adpater׃个文?a >memcached.js?br />    
    fork的分支在Q?br />    https://github.com/killme2008/node-leveldb

    ~译node-leveldb之后Q执?br />
node memcached-adpater/memcached.js

    卛_启动memcached adapter?1211端口Q你可以telnet上去试。目前仅支持get/set/delete/quit协议Q不支持flag和exptime?br />

dennis 2011-05-31 16:45 发表评论
]]>
Node.js Undocumented(1)http://www.aygfsteel.com/killme2008/archive/2011/05/31/351368.htmldennisdennisMon, 30 May 2011 16:33:00 GMThttp://www.aygfsteel.com/killme2008/archive/2011/05/31/351368.htmlhttp://www.aygfsteel.com/killme2008/comments/351368.htmlhttp://www.aygfsteel.com/killme2008/archive/2011/05/31/351368.html#Feedback6http://www.aygfsteel.com/killme2008/comments/commentRss/351368.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/351368.html
    node.js的API文档做的不是很好Q有些部分干脆没文档Q最l还是要看代码才能解冟뀂我q里记录下看源码过E中看到的一些APIq补充一些测试例子。在?a >node.js的朋友可以瞧瞧?br />

    process.reallyExit(status)

    用于q程d退出,status讄退出的状态码。请注意QreallyExit退出的q程不会(x)调用'exit'事gQ下面的代码不会(x)有Q何输出:(x)
var interval=setInterval(function(){
    process.reallyExit(
1);
},
1000);
process.on('exit',
function(){
    console.log(
"hello");
});

   process._kill(pid,sig)

   用于l指定pid的进E发送指定信PcMkill命o(h)Q,q是?#8220;private”Ҏ(gu)Q你需要慎重用,下面的代码会(x)杀死自w的q程Q?br />
var pid=process.pid
process._kill(pid,
9);

   process.binding(name)

   非常有用的方法,很奇怪API文档里竟然没提到Q这个方法用于返回指定名U的内置模块。例如下面的代码打印node_net模块所有的可以调用的方法或变量Q很多是文档没有提到的ƈ且没有exports的,后箋我会(x)介绍下)Q?br />
var binding=process.binding('net');
console.dir(binding);

   process.dlopen(filename,target)

   看源码注释说是用来动态加载node.module的动态链接库的,以后试写扩展的时候也许可以尝试一下?br />
   定时?/strong>
   Node.js的定时器模块的实现是有讲I的Q对于超时时间after<=0的callbackQ会(x)在内部new一个TimerqstartQ本质是使用libev的timer机制Q;但是对于after>0的callbackQ却不是q样。因为在实际应用中,大多数定时器事g的超时时间都是一L(fng)Q如果每个事仉new一个TimerqstartQ代价太高。因此node.js采用了一个类似哈希表的方案,相同after时旉的定时器事gl织成链表,以after为keyQ以链表为value整体构成一张表。每个链表只new一个Timer,q个Timer负责整个链表的定时器事gQ当某个事g时调用后,利用ev_timer_again来高效地重新讄时旉?br />   如果你确实希望对于after>0的定时器也每ơnew一个Timer来处理,那也可以做到Q这p用到前面提到的process.bindingҎ(gu)来获取timer模块,一个例子:(x)
var Timer = process.binding('timer').Timer;

var timer=new Timer();
timer.callback
=function(){
    console.log(
"callback called");
};
timer.start(
1000,0);
  
    timer.callback
    讑֮timer的回调函敎ͼ当超时的时候调用?br />
    timer.start(after,repeat)
    启动定时器,在after毫秒之后调用时回调Q如果repeat==0Q则自动停止定时器;如果repeat>0Q则在repeat毫秒之后再次调用callbackQ以repeat毫秒为间隔不断重复下厅R?br />
    ps.q篇blog刚好是我的第499blogQ不出意外,W?00还是l介lnode.js?br />   

dennis 2011-05-31 00:33 发表评论
]]>
վ֩ģ壺 ƽ| | ʱ| | ˳| ɽ| | | | | | | | | ʯ| | կ| | | | ξ| Խ| ͤ| °Ͷ| ƽ| ʩ| | Ȫ| | | | лͨ| ʡ| ³| ǭ| | | | ɽ| | ǡ|