接上回对DHT网络的研究,我用erlang克隆了一个磁力搜索引擎。我这个实现包含了完整的功能,DHT网络的加入、infohash的接收、种子的获取、资源信息的索引、搜索。 如下图: 在我的笔记本上,我开启了100个DHT节点,大致均匀地分布在DHT网络里,资源索引速度大概在1小时一万个左右(包含重复资源)。 这个程序包含三大部分: DHT实现,kdht,https://gi...
使用ActionScript开发Ice Web客户端
我们目前的项目服务器端使用了Ice来构建。Ice有一套自己的网络协议,客户端和服务器端可以基于此协议来交互。由于Ice使用Slice这种中间语言来描述服务器和客户端的交互接口,所以它可以做到极大限度地屏蔽网络协议这个细节。也就是说,我们只要借助Ice和Slice,我们可以轻松地编写网络程序。 然后,我们的后端现在需要一个运行在Web浏览器上的客户端。要与Ice做交互,如果使用TCP协议的话...
erlang编程技巧若干
guard guard可以以逗号或者分号分隔,以逗号分隔表示最终的结果为各个guard的and结果,以分号则是只要任意一个guard为true则最终结果为true。 guard(X, Y) when not(X>Y), is_atom(X) -> X + Y. guard在list comprehension中可以筛选元素: NewNodes = [Node |...
P2P中DHT网络爬虫
DHT网络爬虫基于DHT网络构建了一个P2P资源搜索引擎。这个搜索引擎不但可以用于构建DHT网络中活跃的资源索引(活跃的资源意味着该网络中肯定有人至少持有该资源的部分数据),还可以分析出该网络中的热门分享资源。小虾不久前发布了一个这样的搜索引擎:磁力搜索。他也写博客对此稍作了介绍:写了个磁力搜索的网页 - 收录最近热门分享的资源。网络上其实也有其他人做了类似的应用:DHT monitorin...
erlang使用感受
用erlang也算写了些代码了,主要包括使用RabbitMQ的练习,以及最近写的kl_tserver和icerl。其中icerl是一个实现了Ice的erlang库。 erlang的书较少,我主要读过<Programming Erlang>和<Erlang/OTP in Action>。其实erlang本身就语言来说的话比较简单,同ruby一样,类似这种本身目标是应用...
erlang和RabbitMQ学习总结
AMQP和RabbitMQ概述 AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互。而RabbitMQ则是AMQP的一种基于erlang的实现。 AMQP将分布式系统中各个子系统隔离开来,子系统之间不再有依赖。子系统仅依赖于消息。子系统不关心消息的发送者,也不关心消息的接受者。 ...
浅析软件工程开发方法学RUP
前言 因为之前一直处在游戏开发行业,由于种种原因一直对软件工程中的项目管理、项目开发方法缺乏体验。虽然项目中也曾倡导编写更多的文档,无论是模块说明文档还是设计文档,但效果一直不好。不甚理想的地方主要体现在文档的规范性欠缺、不统一、浮于表面没有实质内容。文档的编写缺乏详尽的方法指导,那么所谓的设计文档要么是用来敷衍上级要么就是随着开发人员的水平不一而千差万别。 当我开始目前这个非游戏项目时...
分布式程序开发平台ICE概览
本文基于ICE Manual及相关文档就ICE的一些主要特性做一个概览,它不是一个tutorial,不是一个guid,更不是manual。 概览 ICE,Internet Communications Engine,按照官方介绍,是一个支持C++、.Net、Java、Python、Objective-C、Ruby、PHP及ActionScript等语言的分布式程序开发平台。按照我的理解,...
使用Clang实现C语言编程规范检查
概述 Clang是LLVM编译器工具集的前端部分,也就是涵盖词法分析、语法语义分析的部分。而LLVM是Apple在Mac OS上用于替代GCC工具集的编译器软件集合。Clang支持类C语言的语言,例如C、C++、Objective C。Clang的与众不同在于其模块化的设计,使其不仅实现编译器前端部分,并且包装成库的形式提供给上层应用。使用Clang可以做诸如语法高亮、语法检查、编程规范检...
C++陷阱:构造函数中的多态
C++中主要是通过给函数加上virtual关键字来实现多态。多态可用于改变一个接口的实现,也算是一种嵌入应用层代码到底层的实现手段。就算你用不到C++那些复杂的技术,多态肯定会被用到。 但加上virtual不一定能保证多态成功: #include <stdio.h> class Base { public: Base() { Init(); ...