我正在使用 Indy 10(阻塞模式)编写一个简单的客户端/服务器聊天程序,现在有一个问题:如何管理连接?
例如,假设一个用户在线上,我们必须为将来的请求建立连接隧道。换句话说,当用户在线时,服务器不需要用户名和密码来处理未来的用户请求,而是通过我们创建的隧道进行处理。
我们应该如何管理这些连接呢?
例如,假设一个用户在线上,我们必须为将来的请求建立连接隧道。换句话说,当用户在线时,服务器不需要用户名和密码来处理未来的用户请求,而是通过我们创建的隧道进行处理。
我们应该如何管理这些连接呢?
我认为每秒100000次检查将比拥有10000个持久TCP连接消耗更少的资源。无论如何,您都需要以某种方式处理这100000个命令,因此这些检查不会成为瓶颈。
尝试改用UDP消息。例如,大多数MMO游戏同时使用TCP和UDP连接。TCP仅用于关键数据,而UDP用于任何其他数据。在您的情况下,UDP似乎是可以接受的。客户端可以发送带有一些自动增量ID的UDP数据包,服务器可以定期发送回它没有收到的ID列表,以便客户端可以重新发送它们。
一种选择是在服务器端创建一个唯一的会话ID(或“令牌”),例如GUID,如果客户端登录。并且在每个请求中,客户端都包括此令牌。
服务器将维护客户端会话和相关会话数据的列表,并在此列表中查找令牌。
即使客户端暂时断开与互联网的连接但仍知道其令牌,应用程序也可以重新连接并继续与服务器的会话。