Apache,NodeJs,服务器发送事件

时间:2016-01-13 18:31:18

标签: node.js apache apache2 server-sent-events

首先,我知道(将节点放在Apache 下)这不是方法,但由于时间限制,我无法进行实验。
我正在尝试将Server Sent事件用于移动应用程序。在遍布Net阅读之后,我发现 Nodejs 是要服务的服务器。我的80/443端口被Apache Web服务器占用,所以我希望Node能够在Apache后面运行。

我面临的问题是: -

1。我无法在刷新浏览器或关闭浏览器时获得关闭/结束事件,而是在经过一段固定的延迟后获得,因此无法在客户端关闭Nodejs中的连接时进行维护。

req.on("close", function() {
    removeConnection(res);
    console.log('Connection closed');
});


2。 Apache正在发送 Keep-Alive:timeout = 5,max = 100 这是我不想要的,因为我希望客户端永远连接,直到任何人关闭连接,因为此浏览器自动关闭连接,我开始获取净:: ERR_INCOMPLETE_CHUNKED_ENCODING 即可。如何仅针对节点代理请求修改此值。

我添加了
ProxyPass / events http://localhost:5000/events
ProxyPassReverse / events http://localhost:5000/events

响应标题

Access-Control-Allow-Headers:密钥,来源,x-requested-with,内容类型,接受,内容类型
访问控制允许方法:PUT,GET,POST,DELETE,OPTIONS
访问控制允许来源:*
连接:保持活动
内容类型:text /事件流;字符集= UTF-8
风俗:头
日期:2016年1月13日星期三18:12:48 GMT
保持活跃:超时= 5,最大= 100
服务器:Apache / 2.4.7(Ubuntu)
传输编码:分块
X-已启动方式:快递

注意: - 当我使用Apache代理节点时,所有这一切都会发生,否则,如果我直接点击Node(由于阻塞端口我无法生产),一切正常。

1 个答案:

答案 0 :(得分:0)

默认情况下,仅在服务器或虚拟主机配置中允许使用KeepAlive设置。

但是在请求处理期间,apache2使用环境变量(基于apache配置)来确定当前设置。

幸运的是,使用mod_rewrite,您可以根据请求更改apache环境变量,因此可以根据特定请求禁用keepalive。

例如:

#Load rewrite module
LoadModule rewrite_module modules/mod_rewrite.so

#Enable mod_rewrite functionality
RewriteEngine On

#rewrite rule inside locationmatch
<LocationMatch ".*\/sse\/.*">
   #This is not required, used only for debug purposes
   Header set X-Intelligence "KEEPALIVEOFF"       
   #Here goes the mod rewrite environment variable trick
   RewriteRule .* - [E=nokeepalive:1]
</LocationMatch>