1

Hoping someone can help me.

I'm using NodeJS v0.8.16 Socket.ID v0.9.13 and HAProxy 1.5-dev17.

My setup is on Amazon AWS using a VPC, HAProxy on a public facing instance and NodeJS on a separate instance which normally is not publicly accessible. I do have an IP address on it for testing.

I have a test setup which logs into the NodeJS server, then opens an authenticated websocket through Socket.IO, session details are saved in Redis to share between them. Once the websocket is connected successfully a request is made through NodeJS which prompts an event to be emitted back to the client.

This flow works correctly when the test references the NodeJS instance directly bypassing HAProxy. When it does route through HAProxy I get the errors from Socket.IO

"reserved fields must be empty" and "no handler for opcode " referencing a random opcode

From what I can see, there is an initial byte that is parsed by Socket.IO using bitmasks to work out what the request is for. After routing through HAProxy yhis value is now not an expected one and throws these errors.

My HAProxy configuration is from another StackOverflow question HAProxy + WebSocket Disconnection

global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      2

defaults
    mode        http
    retries 3
    option redispatch
    option http-server-close


frontend all 0.0.0.0:3000
    timeout client 5000
    default_backend www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend if is_websocket

backend www_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout server 5000
    timeout connect 4000
    server server 10.0.0.214:3000 weight 1 maxconn 1024 check

backend socket_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout queue 5000
    timeout server 5000
    timeout connect 5000
    timeout tunnel 3600s
    timeout http-keep-alive 1s
    timeout http-request 15s
    server server1 10.0.0.214:3000 weight 1 maxconn 1024 check

I've also tried other various HAProxy configurations but end up with the same result.

Has anyone come across this issue. I'm not sure what I've done incorrectly.

Community
  • 1
  • 1
samjm
  • 51
  • 4
  • You are using 1.5-dev17. It may have something broken. Try with a stable version. – user568109 Mar 26 '13 at 09:42
  • I will try an earlier version, from what I read it was only 1.5-dev10 that has support for Socket.IO – samjm Mar 27 '13 at 06:41
  • ahem i may be wrong but haproxy 1.1.28 supported websockets, which is what sockets.io uses. try with stable 1.4.8 version. Here is a good configuration, you can use http://stackoverflow.com/questions/4360221/haproxy-websocket-disconnection – user568109 Mar 27 '13 at 07:10

0 Answers0