FG
📡 Networking

Websocket proxy does not complete

Freshabout 21 hours ago
Mar 14, 20260 views
Confidence Score55%
55%

Problem

I am using http-proxy to proxy to the socket.io driven app tty.js The socket does not seem to be connecting most of the time. 1 of 5 times I refresh the page it connects, otherwise I see `Text Status: Pending` for the websocket, in chrome developer tools: I am using: - Amazon EC2 linux: `$uname -a Linux ip-10-236-133-58 3.4.37-40.44.amzn1.x86_64 #1 SMP Thu Mar 21 01:17:08 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ` - Either `node v0.10.13` and `node v0.6.21` - `http-proxy@0.10.3`

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Fix WebSocket Connection Issues in Proxy Setup

Medium Risk

The WebSocket connection is not completing due to potential issues with the proxy configuration, including incorrect handling of WebSocket upgrade requests and timeouts. The http-proxy version being used may not fully support WebSocket connections in the way required by socket.io, especially in older Node.js versions.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Upgrade Node.js

    Upgrade Node.js to a more recent version that has better support for WebSocket and socket.io. Versions 14.x or higher are recommended for improved performance and compatibility.

    bash
    nvm install 14 && nvm use 14
  2. 2

    Update http-proxy

    Update http-proxy to a newer version that has improved WebSocket support. The latest version can handle WebSocket connections more reliably.

    bash
    npm install http-proxy@latest
  3. 3

    Configure WebSocket Upgrade Handling

    Ensure that your proxy configuration correctly handles WebSocket upgrade requests. This includes setting the appropriate headers and ensuring that the upgrade is properly routed.

    javascript
    const proxy = require('http-proxy').createProxyServer();
    
    proxy.on('upgrade', function (req, socket, head) {
      proxy.ws(req, socket, head, { target: 'ws://your.socket.io.server' });
    });
  4. 4

    Increase Timeout Settings

    Increase the timeout settings for the proxy to allow more time for WebSocket connections to establish, especially under heavy load or slow network conditions.

    javascript
    proxy.timeout = 60000; // Set timeout to 60 seconds
  5. 5

    Test and Monitor Connections

    After making the above changes, test the WebSocket connections by refreshing the page multiple times and monitoring the connection status in Chrome Developer Tools. Ensure that the connections are stable and complete.

    bash
    No code required for this step.

Validation

Confirm that the WebSocket connection completes successfully on multiple refreshes without showing 'Text Status: Pending'. Monitor the server logs for any errors related to WebSocket connections.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

proxyhttpnode.js