日期:2014-05-17  浏览次数:21332 次

请问QQ怎么是P2P通信呢?聊天不是要经过服务器转发吗?另外,问一下用c#做个类似QQ的功能1个月搞得掂吗?
如果是c#视频,应该用到P2P技术吧(课本说视频编码是P2P这一章出现的)

百度百科:
P2P是英文Peer-to-Peer(对等)的简称,又被称为“点对点”。“对等”技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。
网络上现有的许多服务可以归入P2P的行列。即时讯息系统譬如ICQ、AOL Instant Messenger、Yahoo Pager、微软的MSN Messenger以及国内的QQ是最流行的P2P应用。它们允许用户互相沟通和交换信息、交换文件。用户之间的信息交流不是直接的,需要有位于中心的服务器来协调。


那这样,我的理解是 如果两个人聊天,直接对话不经过服务器转发这样就是P2P,但是ICQ不是每次对话都有经过服务器的转发吗,这样也能算是P2P?



------解决方案--------------------
P2P也可以集成到C/S中
------解决方案--------------------
我做过类似这个的,基于TCP或者UDP的协议,很简陋的,可以在局域网里面聊天,需要一个服务端来告诉客户端,当前有多少用户在线,并且显示用户列表,另外一种是不需要服务器的,客户端之间互相通信,需要知道对方的IP才能通信。
------解决方案--------------------
探讨
我做过类似这个的,基于TCP或者UDP的协议,很简陋的,可以在局域网里面聊天,需要一个服务端来告诉客户端,当前有多少用户在线,并且显示用户列表,另外一种是不需要服务器的,客户端之间互相通信,需要知道对方的IP才能通信。

------解决方案--------------------
腾讯几亿用户 聊天都经过数据库的话 那估计要比Google还要大的数据库才行吧

------解决方案--------------------
服务器只是记录你的好友信息列表和在线用户等少量的信息。聊天的时候,你是与聊天对象直接通信的,没有经过服务器。聊天的记录也是保存到本地。
------解决方案--------------------
QQ有很种通讯手段并用,比如说首先会多次使用udp并且重发,然后使用tcp,然后还会重定向到http端口去联网,等等。

p2p是一个网络概念,并不是什么简单socket通讯概念。它是指信息不保存,而是分散在终端。中心服务系统(这可能是一台服务器、也可能是一个网络)顶多只是帮应用程序联系到好友而已。

如果说到简单的通讯概念,那么“对等网络”这个词也就足够了。它是指一个应用程序与另外的机器之间,它既做服务器有做客户端,也就是两套程序全都有,这个概念。其中这也没有改变关于c/s的概念,只不过到底是c还是s的角色是到不同的通讯内容的时序上了。

关于你说的“......是最流行的P2P应用”,我不知道是哪一个烂书上的。这个说法似是而非。如果你不去指出细节,那么有时候就是骗人的。就这句话来说,前后两句话词不达意。
------解决方案--------------------
qq显然混合了各种通讯模式。

一个典型的情况是,你可以收到离线的消息,对不对?
------解决方案--------------------
资格比较老、比较成熟的p2应用当然莫属skype了。它的具体技术是保密的,但是可以以测试的方法来分析器通讯机制。其实它谈不上多少时髦的所谓“打洞”技术。当两个终端可以直接联系,就直接联系。如果不能直接联系,网络系统会指派它们共同通过最近的一个在外网的客户机器作为临时服务器。关键还是其通讯协议非常适合语音通讯、其编码解码技术非常先进。就这么简单。
------解决方案--------------------
探讨
资格比较老、比较成熟的p2应用当然莫属skype了。它的具体技术是保密的,但是可以以测试的方法来分析器通讯机制。其实它谈不上多少时髦的所谓“打洞”技术。当两个终端可以直接联系,就直接联系。如果不能直接联系,网络系统会指派它们共同通过最近的一个在外网的客户机器作为临时服务器。关键还是其通讯协议非常适合语音通讯、其编码解码技术非常先进。就这么简单。

------解决方案--------------------
关于是否可以在一个月作出“类似QQ”的功能,我其实不知道你具体是说什么。这可以用一小时,也可以用一年(或者说10年也不过分)。我想你就想知道自己有几个手指头一样,清楚地知道具体什么功能、什么操作界面、什么容量和性能要求、什么样的子系统架构和扩展性要求,等等,这以后才知道时间估计靠不靠谱。
------解决方案--------------------
其实我也不懂,说说我对P2P的看法,不涉及通讯细节。
P2P的目标是尽可能不依赖服务器。当然启动服务器还是需要的,也就是客户端第一次连接网络的时候需要服务器告诉它如何找到网络。这样你可以把一个P2P群看作是一个单独的局域网(只是打个比方)。
要达到这个目的,就需要把每个客户端(用户)当做服务器来使用,一般来说这个网络是很不稳定与不可靠的。
为了使这个网络保证一定的稳定性与可靠性,需要一种在容错与冗余之间相对平衡的网络拓朴结构将客户端组成一个有效的查找网络,这个网络应该是自维护的。
一般常见的有KAD网络。我个人认为比较完美的是跳跃链表,不过实现逻辑比KAD复杂。
------解决方案--------------------
我是这么理解的,QQ服务器在这方面应该起到一个授权的作用,而并非中转。