活着“在服务器响应中
我试图建立一个从Silverlight应用程序到PHP页面的HTTP持久连接(即没有为每个HTTP请求创建一个新的TCP连接),由Apache服务器托管。
为此,我需要Web服务器发送其HTTP响应,并将“连接”头设置为“保持活跃”。 客户端,似乎没有任何问题,因为Silverlight提供的网络API基本上是浏览器网络功能的一个包装,从我读过的内容来看:如果浏览器支持HTTP 1.1和Connection:Keep-Alive默认情况下,它的请求,没关系。 Content-Length也被很好地定义,以便服务器知道何时必须发送响应。 但是,服务器对PHP请求的响应系统地将“Connection:”设置为“close”,从而结束连接并阻止持续连接。
我试过一些东西来解决这个问题:不同的方法(GET和POST),在我的脚本的开头用下面的PHP代码显式地给出了一个“Connection:keep-alive”的响应:
header("Connection: Keep-alive");
后者将预期的标题添加到响应中,这很好,但附加的“Connection:close”仍然会在后面的响应标题中添加。
它是PHP或Apache的特性,它强制“关闭”(出于某种安全或性能目的,我猜测)还是我只是在这里丢失了某些东西?
提前致谢。
PS:通过嗅探数据包,我注意到没有多少网站使用“Keep-alive”并且TCP连接重新建立。 Keepalive是HTTP 1.1下的默认和首选行为吗?
Keep-Alive功能不适用于持续连接。
Keep-Alive旨在减少网站的连接数量。 不要为网页中的每个图像/ css / javascript创建新的连接,而是会重复使用相同的连接。
在Apache中也有一些设置可以阻止这种情况发生,例如连接请求的最大数量或请求之间的超时。 这也会让你的资源非常快,因为每个连接都需要它自己的线程。
您应该切换到另一种解决方案,即用于这种工作。
对于保持连接开放的服务,您可以查看http://orbited.org和http://twistedmatrix.com/trac/
由于PHP不管理HTTP连接,因此无法更改此设置。 你需要在服务器中设置它。 例如,如果您使用的是mod_php,则可以在Apache中启用保持活动状态,
KeepAlive On
链接地址: http://www.djcxy.com/p/87293.html