Delphi-Cross-Socket icon indicating copy to clipboard operation
Delphi-Cross-Socket copied to clipboard

能否开放ICrossHttpRequest,ICrossHttpResponse的Reset的方法

Open leeonsoft opened this issue 6 years ago • 2 comments

在长连接的时候,一次请求完成后,服务端的ARequest: ICrossHttpRequest; AResponse: ICrossHttpResponse 这两个对象并没有被释放。要等到下一次 请求上来才能Reset,如果Request里面Post上来的比较大的Stream,那服务端的内存占用也是比较大的。所以在发送给客户端完成后,可以手工Reset掉这部分内存占用。另外ICrossHttpConnection 对象是否有最后一次访问时间?服务端针对长时间没有数据传输,并且还是长连接的,可以手工断开这些连接。

leeonsoft avatar Jul 10 '19 23:07 leeonsoft

实际上现在是在处理完请求之后就自动调用了Reset了,所以应该不会出现你说的请求响应之后还占用Post的内存, 你可以看看 ParseRecvData 这个方法里有着一段

` // 处理请求 if (LRequest.FParseState = psDone) then begin DoOnRequest(LHttpConnection);

  LRequest.Reset;
  LResponse.Reset;
end;

`

winddriver avatar Jul 15 '19 01:07 winddriver

实际上现在是在处理完请求之后就自动调用了Reset了,所以应该不会出现你说的请求响应之后还占用Post的内存, 你可以看看 ParseRecvData 这个方法里有着一段

` // 处理请求 if (LRequest.FParseState = psDone) then begin DoOnRequest(LHttpConnection);

  LRequest.Reset;
  LResponse.Reset;
end;

`

处理后马上调用Reset,就导致在DoOnRequest(LHttpConnection)里面不适合新开线程,因为新线程访问的Request被Reset了。

elevenman2001 avatar Apr 30 '21 03:04 elevenman2001