首页 文章

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

提问于
浏览
0

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

1 回答

  • 0
    • 您可以使用WebSockets . XMLHttpRequest现在可能已经过时,因为它不是实时的(因为它不是实时的),尽管您可以回退使用不适合使用不支持WebSockets的浏览器的人

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

    • 对于除此之外的任何事情,使用TCP(除非你进行打孔以实现p2p),因为丢失数据可能对你不利,并且TCP处理它 .

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

    • 您将收到IOException . 如果连接未正确关闭,则在您无法响应的超时后,将根据您的需要更改异常 . 这假设你使用TCP,否则你应该根据你收到(或不接收)的响应/数据考虑客户连接或断开连接 .

相关问题