0

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

4

1 回答 1

0
  1. 您可以使用 WebSocket。XMLHttpRequest 现在对于任何实时的东西可能已经过时了(因为它不是实时的),尽管对于使用不支持 WebSockets 的浏览器的人,您可以回退到使用它

    • 如果您发送的信息仅在发送时有效,则使用 UDP,例如在将是玩家位置的游戏中(您不关心接收他们 5 秒前的位置)。此外,您不能将 UDP 与 WebSocket 一起使用

    • 除此之外,请使用 TCP(除非您通过打孔来实现 p2p),因为数据丢失可能对您不利,而 TCP 会处理这种情况。

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

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

于 2013-05-26T12:12:18.177 回答