我怎样才能管理Indy的连接? (DELPHI)

时间:2010-07-02 11:01:52

标签: delphi connection indy

我正在用indy 10(阻止模式)编写一个简单的客户端/服务器聊天程序,并且有一个问题是我如何管理连接? 例如,想象一个在服务器上联机的用户,我们必须为将来的请求建立一个连接隧道。换句话说,当用户在线时,服务器不应该需要用户名和密码以用于将来的用户请求。它将与我们在用户来时创建的隧道有关。

我们如何管理连接?

[抱歉我的英语不好]如果你不能理解我,请告诉我发一个新的帖子。

谢谢

3 个答案:

答案 0 :(得分:3)

对于问题中描述的场景,没有太多的管理要做。为避免必须在每个请求上重新进行身份验证,只需不要关闭连接。特别是在聊天服务器中,每个参与者很可能会建立连接,然后在聊天期间继续使用相同的连接。

Indy服务器对象已经保留了打开连接的列表,因此当您想要向其他参与者广播聊天消息时,您可以遍历该列表。

答案 1 :(得分:1)

我认为每秒100000次检查将比拥有10000次持久TCP连接的资源消耗更少。无论如何,你需要以某种方式处理这些100000命令,因此这些检查不会成为瓶颈。

尝试使用UDP消息。例如,大多数MMO游戏都使用TCP和UDP连接。 TCP仅用于关键数据,UDP用于任何其他数据。在你的情况下UDP似乎是可以接受的。客户端可以发送带有一些自动增量ID的UDP数据包,服务器可以定期发回它没有收到的ID列表,这样客户端就可以重新发送它们。

答案 2 :(得分:0)

一种选择是在服务器端创建唯一的会话ID(或“令牌”),例如GUID,如果客户端登录。在每个请求中,客户端都包含此令牌。

服务器将维护客户端会话和关联会话数据的列表,并在此列表中查找令牌。

即使客户端暂时与Internet断开连接但仍知道其令牌,应用程序也可以重新连接并继续与服务器进行会话。