Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于instant messenger TCP或UDP,什么更好?_Java_Sockets_Messenger - Fatal编程技术网

Java 对于instant messenger TCP或UDP,什么更好?

Java 对于instant messenger TCP或UDP,什么更好?,java,sockets,messenger,Java,Sockets,Messenger,我需要在Java语言中使用纯套接字实现客户端/服务器即时通讯工具。 服务器应该为大量客户端提供服务,我需要决定应该使用哪些套接字—TCP还是UDP。 谢谢,科斯塔 TCP 原因: TCP:“绝对保证传输的数据保持完整,并以发送时的相同顺序到达。” UDP:“根本不能保证发送的消息或数据包能够到达。” 了解更多信息,请访问: 您希望您的聊天信息可能丢失吗 编辑:我错过了关于“大型聊天程序”的部分。我认为,由于聊天程序的性质,它需要是一个TCP服务器,我无法想象用户通过UDP协议发送的实际文本内容

我需要在Java语言中使用纯套接字实现客户端/服务器即时通讯工具。
服务器应该为大量客户端提供服务,我需要决定应该使用哪些套接字—TCP还是UDP。
谢谢,科斯塔

TCP

原因:

TCP:“绝对保证传输的数据保持完整,并以发送时的相同顺序到达。”

UDP:“根本不能保证发送的消息或数据包能够到达。”

了解更多信息,请访问:

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

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


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

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


(简短的回答是“使用TCP”……但这对你自己来说是值得考虑的。)

TCP将为你提供可靠性,这在即时消息传递过程中当然是可取的——你不希望在交谈过程中丢弃消息


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

您可以同时使用这两种方法。使用TCP交换实际消息(因此不可能有数据丢失和流式传输大型消息(例如,包含JPEG等)。仅使用UDP将短“connectNow”消息发送到有消息排队的客户端。客户端可能具有以下状态(NotLoggedIn、TCPconnected、TCPdisconnected、LoggedOut)通过各种超时来控制状态转换以及正常的消息交换事件。UDP“connectNow”消息将指示“TCPdisconnected”中的客户端进行连接,然后移动到“TCPconnected”,在那里他们将停留,交换消息,直到某个非活动计时器指示客户端暂时断开连接。当然,这将当然,不可靠,因此您可能希望每X秒重复“connectNow”消息N次,直到客户端连接。在任何情况下,客户端都应该每X分钟尝试一次轮询,以防万一…

这取决于您的要求。您给我们的唯一要求是“大量客户端”基本上是没有意义的,因为我们不知道你是否认为800个客户是一个“大数字”。或者16000。可能同时有上万个客户端。事实上,我不希望消息丢失,但服务器可以创建的套接字有任何限制吗?据我所知,TCP为每个连接的TCP客户端打开套接字。我不会担心服务器上的负载限制,除非您计划实现一个大得离谱的聊天程序。ThTCP服务器上的最大连接数限制为65536个连接。是的,您必须有一个到每个客户端的开放连接。