我正在Delphi中开发一个消息系统。我在我的客户端应用程序中使用我的服务器应用程序中的idTcpServer和idTcpClient。客户端应用程序每10秒钟ping服务器以查看连接是否处于活动状态,并通知服务器将用户的状态设置为联机状态。并且用户也可以将消息发送给他的联系人。所有这些请求之后,我发送请求后立即通过socket.readln
命令获得服务器的响应。例如ping服务器:Delphi tcpServer异步请求
TcpClient.socket.writeln('i am online');
if TcpClient.socket.readln = 'ok' then
begin
{commands}
end;
我还使用长轮询检查新消息。我从tcpClient发送'check for new messages ' + timestamp
,然后在服务器上,我检查数据库中的新消息是否比我在While
循环中收到的时间戳更新,因此当有新消息时,循环会中断并向客户端发送通知。
但是这个系统不适合我。有时,当客户端应用程序正在ping服务器时,我会收到针对checking for new messages
的响应。
我已经开发了相同的系统在PHP中没有问题。但这里一定有问题。
我认为它不是异步的。我该怎么办?
感谢您的详细解答。我搜索了一下“使用tcpServer在delphi中推送消息”。我没有找到好的例子。你能否给我一些在线参考。我认为在我的服务器应用程序中,我应该将'idcontext'的数据保存到内存中,并将新的消息通知发送给它。它是否正确? – Agha 2014-09-25 13:40:21