none
求助,基于P2P网页播放器 RRS feed

  • 问题

  • 目前我通过WCF的框架开发一个在线的WEB P2P播放器,其功能已基本实现,但在P2P处理却存在问题。例如当一个节点A请求一个文件块时它会向邻居节点发出请求,为了减少网络资源我将HOTCOUNT=1  ,然后其中一邻节点C接收消息并通过回调调用CALLBACK将该文件块(设为50K)发送给A ,奇怪的是这时不但A接收到了,其它的BD节点都接收到了这个消息。这样就造成每个节点网络资源占用高。 按道理通过回调只响应ACALLBACK方法才对,是PEER不支持回调,还是我的方法错了。

    另我采用的是自定义对等解释(CustomPeerResolverService),

    合同定义:[OperationContract(IsOneWay = true,IsInitiating=true)]
             void SendFileBuffer(NewvP2PResponse response);

     

    //接收到A的消息,通过程序判断如果本身有A要的数据,则采用回调方式将数据发出  response包括相应的数据流 大小有50K

    OperationContext.Current.GetCallbackChannel<INewvP2PChanel>().SendFileBuffer(response);

    在执行上面的方式后A虽然接收到了,但同时所有其它节点也接收到了。其原理跟不采用回调方式需直接执行SendFileBuffer一样将消息转发给各个邻节点。 

    虽然其它节点可以判断是否接收,但数据包已通过网络发送过来了。 

    通过资料发现NetPeerBinding好像不支持回调操作,但程序却可以运行,只不过不是真正意义上的回调。难道本质就是如此吗,哪还有什么意义呢,哪就不能是点对点,而是UDP了。

     

    各位大侠,出来帮帮我呀。

    • 已编辑 zingerwu 2010年7月2日 7:39 update
    2010年7月2日 7:25

答案

全部回复