Я все еще занимаюсь настройкой HAproxy, чтобы он работал с socket.io.
мой последний вопрос был таким: HAProxy кеширует пересылку? и у меня это работает, но по какой-то причине после аутентификации и отправки некоторых команд соединение разрывается и создается новое соединение, как вы можете видеть здесь:
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)
Я пробовал несколько конфигураций, примерно так: https://stackoverflow.com/questions/4360221/haproxy-websocket-disconnection/
а также объявление двух бэкэндов и использование ACL для пересылки на бэкэнд, у которого есть опция http-pretend-keepalive, когда запрос является запросом веб-сокета, и на бэкэнд, у которого есть http-server-close, когда запрос только для socket.io статические файлы или любой другой тип запроса, кроме веб-сокета.
Я бы пояснил, что http-server-close находится только на бэкэнде nginx, а в бэкэнде статических файлов, http-pretend-keepalive находится во всем интерфейсе и в бэкэнде websocket.
кто-нибудь может указать мне правильное направление? Я пробовал несколько комбинаций, и пока ни одна из них не работала :(
получил ответ из списка рассылки HAproxy, где пользователь по имени "Baptiste" дал мне эту ссылку:
http://blog.exceliance.fr/2012/11/07/websockets-load-balancing-with-haproxy/
эта конфигурация отлично работает с socket.io (протестирована со всеми протоколами, кроме flashsockets). Что заставляет его работать, так это набор параметров в директиве по умолчанию, проверки веб-сокетов в бэкэндах и проверки заголовков на самом деле не нужны, и вы можете установить свой собственный ACL для того, что вам нужно, чтобы решить, используете ли вы бэкэнд, который выполняет приложение socket.io или нет.
Стабильная версия HAproxy не работает с этой конфигурацией, вам нужна версия 1.5-devel10 или новее, чтобы она работала (я использовал версию 1.5-devel14).