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

本文介绍了SkipNet及其MessageRouting模块的基本概念与实现原理。详细分析了覆盖网中消息的定义与处理流程,并探讨了如何利用这些通用组件来支持不同的P2P协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究过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函数
OverlayReplyCallback:Callback形式的类定义的是一种异步回调函数,当等待消息超时或接收到OverlayReplyMsg时执行。
Timer:定时器,实验中可以利用定时器不断循环插入消息到消息队列。
2.  注意层的概念,必须明确消息当前是由哪一层在处理。覆盖网是位于应用层和传输层之间。MessageDelivery.cs文件定义了其与下层通信的借口,Application.cs则定义了Overlay之上的一般接口
(所有消息的基类) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值