M
mill666
Unregistered / Unconfirmed
GUEST, unregistred user!
在做银行一些中间业务的时候,一般情况都是在银行端做一个长连接跟第三方进行连接;银行的终端都是通过这个长连接跟第三方进行数据包交换;
假设我用一个TIdTcpserver作为服务器,用一个TidTcpclient作为客户端,这个TidTcpclient连接这个Tidtcpserver,作为长连接;
我在Tidtcpserver的onExecute进行报文的处理;
因为TIdTcpserver好像是针对一个连接启动一个子线程,这样针对这个长连接TidTcpserver只启动一个线程来处理Tidtcpclient发过来的报文;那么问题就出来了,这个线程同时只能处理一个报文,这个报文处理完后再读下一个报文,这样变成是阻塞的了,即使我把接收后的报文放在另外一个类的线程进行处理,但是不可避免的是TidTcpserver同时也只能接收一个报文,然后再循环接收下一个报文;
这样的法TidTcpserver的处理效率就很低了;
不知道大家是怎么解决这个问题的??
最好的是让Indy能够识别当有新的报文到达的时候就启动一个线程来处理这个报文。
Tidtcpserver这种基于新的连接启动一个线程的方式好像有点不太好用。
假设我用一个TIdTcpserver作为服务器,用一个TidTcpclient作为客户端,这个TidTcpclient连接这个Tidtcpserver,作为长连接;
我在Tidtcpserver的onExecute进行报文的处理;
因为TIdTcpserver好像是针对一个连接启动一个子线程,这样针对这个长连接TidTcpserver只启动一个线程来处理Tidtcpclient发过来的报文;那么问题就出来了,这个线程同时只能处理一个报文,这个报文处理完后再读下一个报文,这样变成是阻塞的了,即使我把接收后的报文放在另外一个类的线程进行处理,但是不可避免的是TidTcpserver同时也只能接收一个报文,然后再循环接收下一个报文;
这样的法TidTcpserver的处理效率就很低了;
不知道大家是怎么解决这个问题的??
最好的是让Indy能够识别当有新的报文到达的时候就启动一个线程来处理这个报文。
Tidtcpserver这种基于新的连接启动一个线程的方式好像有点不太好用。