服务器推送或客户端请求? TCP还是UDP?

时间:2013-05-26 08:46:33

标签: java tcp udp socket.io

我想实现一个实时信息的功能,比如在facebook聊天,但有几个问题让我困惑:
1.为了减少服务器的开销并使其真正“实时”,我应该使用全双工通信方式,如socket而不是Ajax,是吗? 2.如果我使用套接字,我应该选择哪种协议,TCP或UDP?
3.假设我正在使用TCP,服务器是否会继续尝试重新发送丢失的软件包,这样会花费很多开销? 4.如果网络在服务器和客户端之间的通信失败怎么办?套接字是自我关闭还是应该处理几种网络条件? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用WebSockets。 XMLHttpRequest现在可能已经过时,因为它不是实时的(因为它不是实时的),但是对于使用不支持WebSockets的浏览器的人来说,它可能会再次使用它

    • 如果您发送的信息仅在发送时有效,请使用UDP,例如在玩家所处位置的游戏中(您无需接收他们所处的位置)几秒钟前)。此外,您不能将UDP与WebSockets一起使用

    • 对于除此以外的任何其他内容,请使用TCP(除非您进行打孔以实现p2p),因为数据丢失可能对您不利,而TCP会处理此问题。

  2. 无论如何,您都必须手动检查并重新发送丢失的数据,除非您接受通信失败

  3. 您将收到IOException。如果连接未正确关闭,则在无法响应的超时之后将抛出异常,您可以根据需要进行更改。这假设您使用TCP,否则当您根据收到(或未收到)的响应/数据考虑客户端连接或断开连接时,您应该弄清楚自己。

相关问题