关于delphi的网络开发解决方法

关于delphi的网络开发
假如我用indy做一个 即时通讯的程序,服务器端维护一个在线用户 列表,有新用户上线时,就加到这个列表里,然后服务器通知其他所有客户端新用户 上线。如果有用户 下线,就从这个列表里把这个用户 删除,通知其他所有客户端用户 下线。
如果客户端发送登出命令给服务器时,没有问题的,所有的客户端都可以收到下线数据。
假如由于网络异常时,客户端掉线,就无法通知其他客户端了。有人提出用心跳包,如果一定时间未收到某个客户端的心跳数据,就从在线用户 列表中删除他,并通知其他客户端。如果这样做的话,服务器是不是需要一个专门的线程来定时检查在线列表的活动状态呢?
这样每隔一段时间就要通过locklist的方式来锁定用户 列表,检查完成以后再unlocklist,这样会不会影响到服务器的效率?有什么 其他方法吗?
客户端发送心跳数据是不是需要自己手工来写?

------解决方案--------------------
自己写,百度 delphi 心跳
------解决方案--------------------
indy的socket通讯是这样,客户端连接服务器是,服务器在服务器端产生一个socket与客户端对应进行通讯,因此可以不采用额外locklist或轮询线程之类的东西。在idtcpserver的onexcute里面(这个代码是线程独立的,只针对当前特定的客户端连接)自己控制。比如你在这里可以采用一个定时器来控制。
IdTCPServer1Execute(AThread: TIdPeerThread);
begin
在这里创建一个当前线程窗口用来注册定时器
然后接收定时器发送心跳包以及相关的检测处理
end;


如果像lz说的那样要另起一个线程来轮询然后发心跳包,我觉得处理起来更复杂,因为设计线程同步和锁定的问题。
------解决方案--------------------
为什么要吵架呢?能够解决问题的话吵吵也无妨,可是终究不能结局问题呀。