什么是DHT爬虫? 来, 给你个最直接的表达, 请直达:btbook.net
上周五, 找程序员方面的工作, 网上对方问我是否会NodeJS, 答曰不会, 于是给我4天的时间学习NodeJS, 4天后就去他那面试(就今天), 学了7, 8个小时, 实在按捺不住, 得写个什么玩意儿, 不然干看书真无聊, 于是拿着半吊子的NodeJS知识来打算重写掉这个我之前用Python写的simDHT, 现在NodeJS版是这个 nodeDHT, 现在在免费的AWS上跑了20个小时, 一共跑了900万资源hash(今天面试官问我跑了多少, 我居然口急说成是9000万, 汗, 但愿没发现出我这个表达bug, 不然面试不过啦). 由于数据量庞大, 很难用sort -u
来去重, 免费的AWS配置超低的, 保守估计有500万唯一资源hash, 再去掉无效的infohash资源, 保守能搞到150万真实种子, 这150万种子里, 保守有30万的影视资源, 所以, 你懂滴… 好邪恶哦.
说说NodeJS版 VS Python版: 1, NodeJS效率更强劲, 但代码不好理解, 估计是我这半吊子NodeJS知识不够. 2, Python代码看起来很单调, NodeJS看起来有点geek风. 3, NodeJS的依赖安装真省事. 4, 用NodeJS的异步来干这个事, 真适合. update(2014-10-31): 经过再次对Python版的simDHT进行重构, 现在和nodeJS版不相上下了.
总结: 就单单论这个DHT爬虫, NodeJS赢了.
顺便请教下, 怎么把代码整得像线性似的?
PS: 不要问我DHT爬虫是如何做成BT站的. 你要是觉得我这个写得不错, 请点个star. TKS! 话说github的star越高, 越容易得到面试机会, 大家帮帮我哈. 失业很无聊. 么么哒!
什么叫代码像线性似的? 不用回调吗?
整成类似同步方式的话,就是promise啦。
do_step1()
.then(function(){
return do_step2()
})
.then(function(){
....
})
撸主是要这个吗?
爲什麼要同步式?
@ryanking8215 这写法好有趣, 查了下, 可用bluebird是吧? tks!! 么么哒!
@xadillax 万一哪天要写一个几万行的项目, 代码是同步, 运行是异步, 这多爽啊
@laomayi ES6 就是这样的。但是至今还是喜欢异步写代码的方式。
promise有性能损,ES6 也是。 归递调用时最爽的。
@MiguelValentine 每天看见自己的node代码里面最后一行有20个右花括号特别有成就感,恩
@zzjin 我就不相信你看到你同事的代码回调特别多的时候, 你能维护得了.
@zzjin 归递调用,AMD写法,不是回调金字塔
async 来处理挺爽的,eventProxy看着也挺爽的。写起来感觉不错啊
var dgram = require(‘dgram’);
var socket = dgram.createSocket(‘udp4’);
socket.on(‘message’, function (message, remote) { //显示server发回的消息 console.log(‘server ip:’ + remote.address + ‘, port:’ + remote.port +’, message:’ + message); });
//监听端口 socket.bind(33333);
//发送消息 function send(server){ var message = new Buffer(“心花路放”); socket.send(message, 0, message.length, 6881, server, function(){ //1秒后再次发送 setTimeout(function(){ send(server); }, 1000); }); };
send(“127.0.0.1”);
为什么没有爬到任何东西出来?
Fibjs作者快点来 :)
@coolicer 跟Fibjs作者毛关系哦.
@laomayi 完全看不懂啊亲。。。。。
@514366607 我小学文化的人都看得懂呢…
也用Nodejs写了一个cnBeta版的 http://refined-x.com/2017/06/09/Nodejs爬虫实践小记/