读懂SkipNet源代码要点(MessageRouting工程)

研究过P2P技术的人应该听说过 SkipNet。由于我还是半路跑 出来学计算机,没有经过实际软件开发的洗礼,写源代码分析确实没有什么底气。
SkipNet源代码于2004年2月份发布。代码写的非常优美(废话,微软都是牛人哦),个人以为是值得学习!源代码大约3万多行,本人也只是看了 一小部分,下面我主要讲 MessageRouting 工程,以下是原始代码文件中对 MessageRouting的注释:
Generic overlay network message definition.   The SkipNet overlay network is derived from this generic definition.  Other overlay networks, such as Pastry, Chord, etc., can also be supported using these classes, allowing applications to be overlay-independent, if desired.
MessageRouting只是对覆盖网的一般定义,从软件工程的角度来说, MessageRouting 定义的类是覆盖网中普遍存在的对象的抽象。所以我们在开发其他的P2P协议时,均可参考和利用这些已存在的代码。
理解 MessageRouting必须掌握两个要点:
1.  理解模拟器源代码首先必须牢记:结点间的通信采用消息来完成。消息打上时间戳放入消息队列,整个P2P模拟器的运行就是不停的从消息队列中取出消息,然后发给相应的结点处理。因此下面主要解释 MessageRouting工程中的消息。
OverlayMsg
public virtual bool CheckContinueRouting( Node localNode ) : 当结点接收到一个消息时,决定是否继续路由消息。
public abstract void ArrivedAtDestination( Node localNode ); 当消息到达目的结点运行
OverlayRequestMsg(发出该消息的结点一般会启动定时器等待相应ID的 OverlayReplyMsg消息)
Continuation:这是一种本地消息,相当于一个本地定时器。到达时执行 Excute函数
O verlayReplyCallback:Callback形式的类定义的是一种异步回调函数,当等待消息超时或接收到 OverlayReplyMsg时执行。
Timer:定时器,实验中可以利用定时器不断循环插入消息到消息队列。
2.  注意层的概念,必须明确消息当前是由哪一层在处理。覆盖网是位于应用层和传输层之间。 MessageDelivery.cs文件定义了其与下层通信的借口, Application.cs则定义了Overlay之上的一般接口
(所有消息的基类) 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值