什么是更好的即时通讯TCP或UDP?

时间:2013-09-08 08:08:06

标签: java sockets messenger

我需要在Java语言中使用纯套接字实现客户端/服务器即时消息 服务器应该服务大量的客户端,我需要决定我应该使用哪些套接字 - TCP或UDP 谢谢,科斯塔。

4 个答案:

答案 0 :(得分:7)

TCP

原因:

TCP:"绝对保证传输的数据保持不变,并按照发送的顺序到达。"

UDP:"无法保证发送的邮件或数据包完全无法访问。"

了解详情:http://www.diffen.com/difference/TCP_vs_UDP

您希望您的聊天消息可能丢失吗?

编辑:我错过了关于"大型聊天程序"的部分内容。我认为由于聊天程序的性质,它需要是一个TCP服务器,我无法想象用户通过UDP协议发送的实际文本内容。

TCP服务器的最大限制是65536个连接。如果您确实需要超过该数字,则可以创建一个调度程序服务器,该服务器将根据当前服务器负载将传入连接发送到相应的服务器。

答案 1 :(得分:4)

你可以同时使用两者。使用TCP交换实际消息,(因此不会丢失数据和流式传输大型消息(例如,包含jpeg等)。仅使用UDP向发送消息排队的客户端发送简短的“connectNow”消息。可能有像NotLoggedIn,TCPconnected,TCPdisconnected,LoggedOut这样的状态,具有各种超时来控制状态转换以及正常的消息交换事件.UDP'connectNow'消息将指示'TCPdisconnected'中的客户端连接,因此移动到'TCPconnected',它们将留在哪里,交换消息,直到一些不活动计时器指示客户端现在断开连接。这当然是不可靠的,所以你可能希望每隔X秒重复'connectNow'消息N次直到客户端连接。无论如何,客户端应该每隔X分钟尝试一次轮询,以防万一......

答案 2 :(得分:1)

这取决于用户是否需要知道消息是否已传递到服务器。 UDP数据包没有固有的确认。如果客户端向服务器发送IM消息并且在传输过程中丢失,则客户端或服务器都不会知道它。

(简短的回答是“使用TCP”......但是值得思考一下对自己的设计含义。)

答案 3 :(得分:1)

TCP会为您提供可靠性,这在即时消息传递过程中肯定是理想的 - 您不希望在对话过程中丢弃消息。

但是,如果您打算使用群发消息,那么最终可能会使用mulitcast。对于这种情况,UDP将是正确的,因为UDP可以处理点到多点。将TCP用于多播应用程序将很困难,因为现在发送方必须跟踪多个接收器的重传/发送速率。一种替代方法是使用TCP进行点对点聊天,并使用UDP进行群组消息传递。