当前位置: 首页 > wzjs >正文

网站建设公司愿景西安企业网站建设模板

网站建设公司愿景,西安企业网站建设模板,河北邯郸中考成绩查询时间,wordpress 上传主题apache连接池的连接有效性 server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。客户端从连接池里拿出连接时,会检查一下连接是否已关闭,如已关闭,会丢弃掉该连接,并尝试从连接池…

apache连接池的连接有效性

server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。客户端从连接池里拿出连接时,会检查一下连接是否已关闭,如已关闭,会丢弃掉该连接,并尝试从连接池再拿一个新的连接,代码机制在AbstractConnPool.lease方法里:

public Future<E> lease(final T route, final Object state, final FutureCallback<E> callback) {Args.notNull(route, "Route");Asserts.check(!this.isShutDown, "Connection pool shut down");return new Future<E>() {...public E get(long timeout, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {while(true) {synchronized(this) {PoolEntry var10000;try {E entry = (PoolEntry)this.entryRef.get();if (entry != null) {var10000 = entry;} else {...// 从连接池租借一个连接E leasedEntry = AbstractConnPool.this.getPoolEntryBlocking(route, state, timeout, timeUnit, this);// 如果租借的连接未关闭,就用该连接返回之if (AbstractConnPool.this.validateAfterInactivity <= 0 || leasedEntry.getUpdated() + (long)AbstractConnPool.this.validateAfterInactivity > System.currentTimeMillis() || AbstractConnPool.this.validate(leasedEntry)) {if (!this.done.compareAndSet(false, true)) {AbstractConnPool.this.release(leasedEntry, true);throw new ExecutionException(AbstractConnPool.operationAborted());}this.entryRef.set(leasedEntry);this.done.set(true);AbstractConnPool.this.onLease(leasedEntry);if (callback != null) {callback.completed(leasedEntry);}var10000 = leasedEntry;return var10000;}// 租借的连接已关闭,关闭该连接,并回到while循环开始,继续调用getPoolEntryBlocking获得新的连接,若池子里没有连接,创建一个新连接。leasedEntry.close();AbstractConnPool.this.release(leasedEntry, false);continue;}} catch (IOException var8) {...}return var10000;}}}};}

AbstractConnPool.this.validate会调用connection的isStale方法:

//CPool.java
protected boolean validate(CPoolEntry entry) {return !((ManagedHttpClientConnection)entry.getConnection()).isStale();}

那么一个连接是如何判定不新鲜(stale)的呢?逻辑如下:

//BHttpConnectionBase.java
public boolean isStale() {if (!this.isOpen()) {return true;} else {try {int bytesRead = this.fillInputBuffer(1);return bytesRead < 0;} catch (SocketTimeoutException var2) {return false;} catch (IOException var3) {return true;}}}

fillInputBuffer方法会尝试从socket里读取字节,返回值为读取的字节数,若返回-1,说明连接已关闭。

顺带说一下,实测发现,isStale的判定对于server端正常或异常关闭连接的情况,都能检测到

各web服务器的keep-alive策略配置

很显然,一个用于生产的web服务器是要配置keep-alive超时的,毕竟机器的IO连接资源有限,万一大量的长连接被占用,新来的请求将得不到服务。

fastAPI可以在启动时指定keepalive的超时时间,像这样:

app = FastAPI()@app.get("/test")
async def root():return "Hello fastapi"if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8002, timeout_keep_alive=600)

这里我们指定600s,默认keepalive超时是5s,即5s没有请求则关闭连接

tomcat的keep-alive策略配置在server.xml里,除了keepAliveTimeout之外,还有maxKeepAliveRequests选项,意思是服务多少个请求后就关闭连接,例如下面的例子,在服务5个请求后关闭连接:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"maxThreads="1000"acceptCount="100"redirectPort="8443"URIEncoding="UTF-8"maxKeepAliveRequests="5"/>

两个参数的含义如下:

keepAliveTimeout:
The number of milliseconds Tomcat will wait for a subsequent request before closing the connectionmaxKeepAliveRequests:
Maximum number of Keep-Alive requests to honor per connection
http://www.dtcms.com/wzjs/546710.html

相关文章:

  • 30岁学网站开发山东网站排名优化公司
  • 自己建一个网站南宁网站定制公司
  • 网站建设网络推广方案公司企业网站建设方案
  • 做背景网站免费制作视频的软件手机版
  • 网站制作案例如何asp.net程序做的网站安全吗6
  • 如何建立一个网站查询数据广告设计的基本流程步骤
  • 贵州一帆建设工程有限公司网站备案后修改网站名称
  • 烟台h5网站建设wordpress页面是什么
  • 狐表做网站品牌推广外包
  • 石家庄自助建站模板幽默软文经典案例300
  • 网站的个人网盘怎么做做婚庆策划的网站
  • 网站建设7个基本流程图阿里邮箱企业版app下载
  • 天津网站建设哪个好个人网上注册公司流程图
  • 网站报名怎么做做网站没有手机端
  • wordpress怎么导入demo文件夹seo收费低
  • 南通网站建设兼职四位分享码2023
  • 建设食品网站如何定位如何很好的进行网站的内部推广
  • 网站开发高级工程师专业牧风的在wordpress
  • 怎么给网站添加关键词长沙软件培训机构排名前十
  • 做拍福利爱福利视频网站fw网页制作教程
  • 大理做网站哪家好一般网站模块
  • 哈尔滨专门做网站新媒体营销的方式
  • 网上商城可行性分析报告东营网站seo服务
  • 怎么架构网站2022年楼市最新消息
  • 万网网站备案北京网站优化实战
  • 重庆营销网站建设公司排名旅游网站设计内容
  • 生肖竞猜网站建设人社部能力建设中心网站
  • h5网站开发中心培训方案怎么做
  • 东莞专业做网站为客户做网站的方案
  • 太原制作微信网站网上接装修工程哪家平台好