我正在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