当前位置:  开发笔记 > 运维 > 正文

TIdServerContext是否可以同时使用多次?

如何解决《TIdServerContext是否可以同时使用多次?》经验,为你挑选了1个好方法。

现在我知道在Indy HTTP Server(TIdHTTPServer)上,它TIdServerContext被重用于从特定客户端传入的多个请求.但是,在设计工作原理时,我需要知道多个请求是否可能使用相同的上下文类相互重叠?

例如,假设在浏览器中键入URL并反复按刷新.我看到的是创建了多个上下文类.但是,我担心在某个地方,可能会使用相同的上下文实例同时处理两个请求.

有可能发生这种情况吗?或者说一个实例永远不会同时处理多个请求是否安全?我几乎肯定它是后者,考虑到上下文是它自己的线程,但我需要确定.



1> Remy Lebeau..:

现在我知道在Indy HTTP Server(TIdHTTPServer)上,TIdServerContext被重用于从特定客户端传入的多个请求.

仅当客户端和服务器使用HTTP保持活动时,才能通过单个TCP连接发送多个请求.否则,每次响应后关闭连接.

但是,在设计工作原理时,我需要知道多个请求是否可能使用相同的上下文类相互重叠?

否.Indy上下文对象是基于每个连接创建的,它们一次在一个线程上运行,并且每个连接一次处理一个HTTP 1.1和更早的请求(HTTP 2允许并行多个请求,但是Indy此时不实现HTTP 2).

例如,假设在浏览器中键入URL并反复按刷新.我看到的是创建了多个上下文类

在刷新时,浏览器正在关闭当前连接并创建一个新连接.关闭连接是取消尚未完成的待处理请求的唯一方法.

但是,我担心在某个地方,可能会使用相同的上下文实例同时处理两个请求.

这是不可能的.

有可能发生这种情况吗?

没有.

或者说一个实例永远不会同时处理多个请求是否安全?

是.它可以在其生命周期内处理多个请求,但不能并行处理.

我几乎肯定它是后者,考虑到上下文是它自己的线程

上下文不是一个线程.更准确地说,上下文代表一个特定的连接,恰好只由一个线程提供服务.Indy可以重用线程(如果您将线程池调度程序分配给服务器),其中给定线程可以在其生命周期内为多个上下文提供服务.但是Indy并没有为多个连接重用上下文.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有