Peercast原本是基于Gnutella协议的。
但发展到现在,已经跟Gnutella没有多大关系了。相关的地方只是在广播机制上采用的仍然是泛洪机制。
Gnutella协议是基于图的协议。
而现在的Peercast是基于树的转发机制,类似于IP组播。
所以严格来说Peercast并不能称之为P2P流媒体,因为只从一个源获得数据,无法体现P2P中加入人数越多越流畅的优势。
Peercast仍保留了一些Gnutella机制的代码,只是为了兼容性,并没有太大的实际作用。
我以前说过看Peercast协议最好先理解Gnutella机制,是当初没具体分析的误解。
向大家说声抱歉。
不过大家可以理解一下Gnutella的泛洪机制,以及TTL和HOP的控制。
我觉得看Peercast源代码要抓住三条主线:
PCP协议:这是Peercast自已定义的协议,实现控制信息的传送。若想发送信息,必须按PCP规定的格式进行封装。
chanMgr和servMgr:这是Peercast中两个最重要的全局对象,可以说这两个对象引发了Peercast几乎所有的操作,把所有的类串联了起来。
servent类:Peercast对每个连接分配一个servent对象,而一个servent对象有着自己的socket和线程,控制信息和频道数据的传输均通过此类来完成。可以说理解了servent类就理解了Peercast的网络编程机制。