socket.io会话以HAproxy结束

我仍然与处理HAproxy的configuration,使其与socket.io工作。

我最后一个问题是: HAProxycaching转发? 我得到它的工作,但由于某种原因,身份validation后,发送一些命令,连接被删除,并build立一个新的连接,你可以看到这里:

info - handshake authorized 2ZqGgU2L5RNksXQRWuhi debug - setting request GET /socket.io/1/websocket/2ZqGgU2L5RNksXQRWuhi debug - set heartbeat interval for client 2ZqGgU2L5RNksXQRWuhi debug - client authorized for debug - websocket writing 1:: debug - websocket received data packet 5:3+::{"name":"ferret","args":["tobi"]} debug - sending data ack packet debug - websocket writing 6:::3+["woot"] info - transport end (socket end) debug - set close timeout for client 2ZqGgU2L5RNksXQRWuhi debug - cleared close timeout for client 2ZqGgU2L5RNksXQRWuhi debug - cleared heartbeat interval for client 2ZqGgU2L5RNksXQRWuhi debug - discarding transport debug - client authorized info - handshake authorized WkHV-B80ejP6MHQTWuhj debug - setting request GET /socket.io/1/websocket/WkHV-B80ejP6MHQTWuhj debug - set heartbeat interval for client WkHV-B80ejP6MHQTWuhj debug - client authorized for debug - websocket writing 1:: debug - websocket received data packet 5:4+::{"name":"ferret","args":["tobi"]} debug - sending data ack packet debug - websocket writing 6:::4+["woot"] info - transport end (socket end) 

我尝试了几个configuration,像这样: https : //stackoverflow.com/questions/4360221/haproxy-websocket-disconnection/

并声明2后端,并使用ACL转发到一个后端,当请求是一个WebSocket请求时,后端具有选项http-pretend-keepalive,当请求仅用于socket.io时,后端具有http-server-close静态文件或者是不是websocket的任何其他types的请求。

我会澄清,http-server-close只在nginx后端和静态文件后端,http-pretend-keepalive在前端都在websocket后端。

任何人都可以指出我正确的方向? 我尝试了几种组合,迄今没有工作:(

从HAproxy maill list中得到了一个答案,在那里一个叫“Baptiste”的用户给了我这个链接:

http://blog.exceliance.fr/2012/11/07/websockets-load-balancing-with-haproxy/

该configuration完全适用于socket.io(使用除闪存外的所有协议进行testing)。 使它工作的是默认指令中的一组选项,对后端websocket的检查和头部检查并不是真的需要,你可以设置你自己的ACL来决定你是否使用正在执行的后端socket.io应用程序或不。

HAproxy的稳定版本不能使用这个configuration,你需要一个1.5-devel10或更新版本才能使它工作(我使用1.5-devel14版本)。