Http11Protocol类

该类是AbstractHttp11JsseProtocol抽象类的实现

	private static final org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory
			.getLog(Http11Protocol.class);

	@Override
	protected Log getLog() {
		return log;
	}

	@Override
	protected AbstractEndpoint.Handler getHandler() {
		return cHandler;
	}

	// ------------------------------------------------------------ Constructor
	
	/**
	 * 构造方法
	 */
	public Http11Protocol() {
		endpoint = new JIoEndpoint();
		cHandler = new Http11ConnectionHandler(this);
		((JIoEndpoint) endpoint).setHandler(cHandler);
		setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
		setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
		setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
	}

	// ----------------------------------------------------------------- Fields

	protected Http11ConnectionHandler cHandler;

	// ------------------------------------------------ HTTP specific properties
	// ------------------------------------------ managed in the ProtocolHandler

	private int disableKeepAlivePercentage = 75;

	public int getDisableKeepAlivePercentage() {
		return disableKeepAlivePercentage;
	}

	public void setDisableKeepAlivePercentage(int disableKeepAlivePercentage) {
		if (disableKeepAlivePercentage < 0) {
			this.disableKeepAlivePercentage = 0;
		} else if (disableKeepAlivePercentage > 100) {
			this.disableKeepAlivePercentage = 100;
		} else {
			this.disableKeepAlivePercentage = disableKeepAlivePercentage;
		}
	}

	// ----------------------------------------------------- JMX related methods

	@Override
	protected String getNamePrefix() {
		return ("http-bio");
	}

	// ----------------------------------- Http11ConnectionHandler Inner Class

	protected static class Http11ConnectionHandler extends
			AbstractConnectionHandler<Socket, Http11Processor> implements
			Handler {

		protected Http11Protocol proto;

		Http11ConnectionHandler(Http11Protocol proto) {
			this.proto = proto;
		}

		@Override
		protected AbstractProtocol<Socket> getProtocol() {
			return proto;
		}

		@Override
		protected Log getLog() {
			return log;
		}

		@Override
		public SSLImplementation getSslImplementation() {
			return proto.sslImplementation;
		}

		/**
		 * Expected to be used by the handler once the processor is no longer
		 * required.
		 * 
		 * @param socket
		 *            Not used in BIO
		 * @param processor
		 * @param isSocketClosing
		 *            Not used in HTTP
		 * @param addToPoller
		 *            Not used in BIO
		 */
		@Override
		public void release(SocketWrapper<Socket> socket,
				Processor<Socket> processor, boolean isSocketClosing,
				boolean addToPoller) {
			processor.recycle(isSocketClosing);
			recycledProcessors.offer(processor);
		}

		@Override
		protected void initSsl(SocketWrapper<Socket> socket,
				Processor<Socket> processor) {
			if (proto.isSSLEnabled() && (proto.sslImplementation != null)) {
				processor.setSslSupport(proto.sslImplementation
						.getSSLSupport(socket.getSocket()));
			} else {
				processor.setSslSupport(null);
			}

		}

		@Override
		protected void longPoll(SocketWrapper<Socket> socket,
				Processor<Socket> processor) {
			// NO-OP
		}

		@Override
		protected Http11Processor createProcessor() {
			Http11Processor processor = new Http11Processor(
					proto.getMaxHttpHeaderSize(), (JIoEndpoint) proto.endpoint,
					proto.getMaxTrailerSize(), proto.getMaxExtensionSize(),
					proto.getMaxSwallowSize());
			processor.setAdapter(proto.adapter);
			processor.setMaxKeepAliveRequests(proto.getMaxKeepAliveRequests());
			processor.setKeepAliveTimeout(proto.getKeepAliveTimeout());
			processor.setConnectionUploadTimeout(proto
					.getConnectionUploadTimeout());
			processor.setDisableUploadTimeout(proto.getDisableUploadTimeout());
			processor.setCompressionMinSize(proto.getCompressionMinSize());
			processor.setCompression(proto.getCompression());
			processor.setNoCompressionUserAgents(proto
					.getNoCompressionUserAgents());
			processor
					.setCompressableMimeTypes(proto.getCompressableMimeTypes());
			processor.setRestrictedUserAgents(proto.getRestrictedUserAgents());
			processor.setSocketBuffer(proto.getSocketBuffer());
			processor.setMaxSavePostSize(proto.getMaxSavePostSize());
			processor.setServer(proto.getServer());
			processor.setDisableKeepAlivePercentage(proto
					.getDisableKeepAlivePercentage());
			register(processor);
			return processor;
		}

		/**
		 * @deprecated Will be removed in Tomcat 8.0.x.
		 */
		@Deprecated
		@Override
		protected Processor<Socket> createUpgradeProcessor(
				SocketWrapper<Socket> socket,
				org.apache.coyote.http11.upgrade.UpgradeInbound inbound)
				throws IOException {
			return new org.apache.coyote.http11.upgrade.UpgradeBioProcessor(
					socket, inbound);
		}

		@Override
		protected Processor<Socket> createUpgradeProcessor(
				SocketWrapper<Socket> socket,
				HttpUpgradeHandler httpUpgradeProcessor) throws IOException {
			return new BioProcessor(socket, httpUpgradeProcessor,
					proto.getUpgradeAsyncWriteBufferSize());
		}
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值