Hello again,

Regarding the second problem (failure to establishing websocket connections
in supported browsers), I can confirm that it happens on both Chrome and
Firefox. And below is what I see for the '101 Switching Protocols' request
in Firefox when it happened:

Request URL: https://www.myexample.com/sockjs/673/nw56jyoj/websocket
> <https://www.playmymodel.com/sockjs/chat/673/nw56jyoj/websocket>Request
> Method: GET
> Status Code: HTTP/1.1 101 Switching Protocols
> *Request Headers
> *User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101
> Firefox/18.0
> Upgrade:websocket
> Sec-WebSocket-Version:13
> Sec-WebSocket-Key:Fg8Z/EASgn6AlVh0hMYLtw==
> Pragma:no-cache
> Origin:https://www.playmymodel.com
> Host:www.playmymodel.com
> Connection:keep-alive, Upgrade
> Cache-Control:no-cache
> Accept-Language:en-US,en;q=0.5
> Accept-Encoding:gzip, deflate
> Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> *Response Headers
> *Upgrade:websocket
> Sec-WebSocket-Accept:NxU0HFQKbhwr7VBCHf23qLXH/Ic=
> Connection:Upgrade


 and below is what follows from the SockJS side:

Closed transport: websocket SimpleEvent(type=close, code=2007,
> reason=Transport timeouted, wasClean=false)


This failure of establishing websocket connection happen relatively often
now, with 4 - 5 Chrome processes running on my laptop, I can almost always
get at least 1 Chrome which encounters this. In addition, I have also
tested this with HAProxy 1.5-dev15, and the problem persists. For
completeness, I attach the updated config as below:

global
>         log 127.0.0.1   local1 info
>         log 127.0.0.1   local1 notice
>         #log loghost    local0 info
>         maxconn 4096
>         chroot /usr/share/haproxy
>         uid 99
>         gid 99
>         daemon
>         #debug
>         #quiet
>
> defaults
>         log             global
>         mode            http
>         option          httplog
>         option          dontlognull
>         retries         3
>         option          redispatch
>         maxconn         500
>         timeout connect 6s
>         timeout client  600s
>         timeout server  600s
>         timeout tunnel  1200s
>
> frontend public
>         mode    http
>         bind    0.0.0.0:80
>         bind    0.0.0.0:443 ssl crt /etc/haproxy/ssl_wc/mysite.pem
> ciphers HIGH:!aNULL:!MD5 no-tlsv10
>         timeout client  300s
>         option  http-server-close
>         option  forwardfor except 127.0.0.1
>         reqadd  X-Forwarded-Proto:\ https if { ssl_fc }
>         reqadd  X-Forwarded-Proto:\ http if !{ ssl_fc }
>         # define ACLs below
>         acl is_https ssl_fc
>         redirect scheme https if !is_https
>         # and other ACLs and rules (omitted here)
>
> backend sockjs_1
>         #timeout server 60s
>         server sock1 127.0.0.1:8000
>
> backend sockjs_2
>         #timeout server 60s
>         server sock2 127.0.0.1:8060
>
> backend nginx
>         #timeout server 20s
>         server nginx 127.0.0.1:8484
>
> backend stats
>         stats enable
>         stats uri /haproxy/stats
>         stats realm Haproxy\ Statistics
>
> backend www
>         #timeout server 300s
>         #option forwardfor header X-Client-IP
>         #no option httpclose
>         #option http-server-close
>         server content 127.0.0.1:8080


Again, backends sockjs_1 and sockjs_2 are what is being affected here.

Could anyone comment on what may cause this undesirable websocket failures
here? Thanks a lot!



Best,
Chris

On Fri, Feb 22, 2013 at 8:40 AM, Chris Yang <[email protected]> wrote:

>
> Hello,
>
> I upgraded to dev17 from dev15. I am running Tornado servers behind
> HAProxy with SockJS support. Comparing to before the upgrade, I've noticed
> two problematic behaviors:
>
> 1. When a client is using IE with xhr-streaming protocol to connect to
> servers, such connections are closed (seeing 'Connection get reset by peer'
> error on the Python side) more often than before. Sometimes disconnection
> happened soon after connection (half a minute). I guess it might be related
> to timeout, but since I haven't changed any configuration on HAProxy, I
> wonder if this behavior is related to the upgrade of HAProxy itself.
>
> 2. From time to time, Chrome failed to finish the websocket handshake with
> the server, and instead used xhr-streaming. This didn't happen before the
> upgrade, but I've noticed at least 5+ such cases during the testing with
> dev17.
>
> I can confirm that both client-side library (sockjs-client) and
> server-side library (sockjs-tornado) have stayed the same since their last
> respective upgrade (months before dev17 came out). So the only variable
> which might have produced the observations above could be HAProxy.
>
> I attach below my HAProxy config (excluding most of the acls), and I'd
> much appreciate that if someone could take a quick look and let me know if
> some setting(s) may not play well with dev17 which might have caused the
> behavior above, or some new setting(s) should be added. Notice that
> backends sockjs_1 and sockjs_2 are the ones experiencing the problems.
>
> global
>         log 127.0.0.1   local1 info
>         log 127.0.0.1   local1 notice
>         #log loghost    local0 info
>         maxconn 4096
>         chroot /usr/share/haproxy
>         uid 99
>         gid 99
>         daemon
>         #debug
>         #quiet
>
> defaults
>         log             global
>         mode            http
>         option          httplog
>         option          dontlognull
>         retries         3
>         option          redispatch
>         maxconn         500
>         timeout connect 6s
>
> frontend public
>         mode    http
>         bind    0.0.0.0:80
>         bind    0.0.0.0:443 ssl crt /etc/haproxy/ssl_wc/mysite.pem
> ciphers HIGH:!aNULL:!MD5 no-tlsv10
>         timeout client  300s
>         option  http-server-close
>         option  forwardfor except 127.0.0.1
>         reqadd  X-Forwarded-Proto:\ https if { ssl_fc }
>         reqadd  X-Forwarded-Proto:\ http if !{ ssl_fc }
>         #option         http-pretend-keepalive
>         # define ACLs and use them below
>         acl is_https ssl_fc
>         redirect scheme https if !is_https
>         # other acls omitted here
>
> backend sockjs_1
>         timeout server 60s
>         server sock_1 127.0.0.1:8000
>
> backend sockjs_2
>         timeout server 60s
>         server sock_2 127.0.0.1:8060
>
> backend nginx
>         timeout server 20s
>         server nginx 127.0.0.1:8484
>
> backend stats
>         stats enable
>         stats uri /haproxy/stats
>         stats realm Haproxy\ Statistics
>
> backend www
>         timeout server 300s
>         #option forwardfor header X-Client-IP
>         #no option httpclose
>         #option http-server-close
>         server content 127.0.0.1:8080
>
> Thanks very much!
>
>
>
> Best,
> Chris
>

Reply via email to