编辑: XR30273052 | 2018-07-15 |
pku.edu.cn 目标 使用gossip协议,设计一个电子公告板系统由服务器端和前端组成客户端通过前端与服务器进行交互客户端可以从指定的服务器获取信息客户端可以提交新信息到指定服务器 体系结构 服务器群多台服务器组成按一定规则相互通信客户端两部分组成客户端测试程序前端客户端通过前端与服务器通信 要求 设计服务器的拓扑结构保证客户端看到的消息是符合因果序的保证客户端不会看到过时消息 服务器的拓扑结构 客户端发送一条消息给指定服务器该服务器如何将该消息转发给其他服务器?服务器间的关系如何组织?环状树状其他…… 服务器拓扑结构 举例1:环状接到消息的节点将消息转发给自己的下一个节点 msg msg msg msg 服务器拓扑结构 举例2:树状接到消息的节点把消息转发给多个邻居节点 msg msg msg msg 服务器拓扑结构 设计时需要注意几个地方消息由哪台服务器开始,发送到哪几台服务器去?接受到消息的服务器,是否需要转发消息?转发给其他哪些服务器?消息是否需要重发?不同的设计将会带来不同的优缺点 保证消息的因果序 由于消息可能会乱序,因此要求客户端看到的消息必须是符合因果序的该任务由服务器端完成,只发布符合因果序的消息例子:客户端1给服务器1发送了一个主帖A,紧接着又发送一条re A到服务器1.服务器1给服务器2转发这两条消息,re A顺利到达,但是消息A被延迟了客户端2从服务器2获取消息,但此时到达服务器2的消息只有re A,此时服务器2不应该把re A发布.客户端2得到的消息应该为空 保证消息的因果序 关于源消息和回复消息bbs系统有 主题模式 ,即回复消息必须跟在相应的主题下需要额外的数据结构维持源消息和回复消息的关系Gossip系统简单实现,相当于bbs系统中的 普通模式 ,不提供 主题模式 .即所有的消息,无论是源消息还是回复消息,都顺序列出只需要用因果序保证回复消息在源消息之后即可.无需特地维护同主题的源消息与回复消息的关系 过时消息 客户端不应该看到过时消息该任务由前端完成例子:客户端从服务器1处获得的消息列表里有2条消息,分别为A和re A下个时刻,客户端连接服务器2,获取消息,但是此时服务器2发布的消息只有A.服务器2上发布的消息符合因果序,但是是过时消息.因此,客户端不应该看到这些过时消息 乱序与丢包 在我们的TransMsg类中,实现了乱序与丢包功能.可以通过设置参数控制为了简化问题,我们将要求分为两层次:1.实现乱序处理即可.2.实现乱序加丢包的处理.同学们可以根据时间和精力来实现相应功能. 测试用例 我们自己写了测试用例,通过调用同学们提交的头文件和静态链接库,来测试函数功能是否正确测试用例也分为两部分:服务器端和客户端配置文件一个简单文本文件记录了服务器群的ip地址和端口客户端测试程序通过该文件得知所有服务器地址服务器端测试程序通过该文件打开tcp监听端口 客户端测试程序简单例子 #include #include front_end.h using namespace std;
struct Address{string ip;
unsigned short port;
};
void main(){FrontEnd f;
vector messages;
vector servers;
ifstream in( address.txt );
Address addr;
while(in>
>