Skip to content

engine_socket transport error "polling request overlap" when connecting through nginx #166

@bstrasser

Description

@bstrasser

Hi.
I currently evaluating engine.io for a new project and found the following issue:

I was testing the connection behaviour with the engine.io server behind nginx to see if engine.io sticks to polling if no websockets are available.
When trying to connect to the engine.io server, the error "polling request overlap" is logged:

engine:core intercepting request for path "/engine.io/" +70ms
engine handling "GET" http request "/engine.io/?transport=polling&t=1365170008372&sid=VzWnLUKmQUxgX1HPAAAA" +67ms
engine setting new request for existing client +1ms
engine:polling setting request +66ms
engine:socket flushing buffer to transport +63ms
engine:polling writing "38:4{"c":1,"t":"13:53:29.448","d":"test"}" +0ms
engine:socket executing batch send callback +1ms
engine:core intercepting request for path "/engine.io/" +56ms
engine handling "GET" http request "/engine.io/?transport=websocket&sid=VzWnLUKmQUxgX1HPAAAA&t=1365170008371" +56ms
engine setting new request for existing client +0ms
engine:polling setting request +56ms
engine:core intercepting request for path "/engine.io/" +5ms
engine handling "GET" http request "/engine.io/?transport=polling&t=1365170008436&sid=VzWnLUKmQUxgX1HPAAAA" +4ms
engine setting new request for existing client +0ms
engine:polling request overlap +4ms
engine:socket transport error +59ms

Server code:

var EngineIO = require("engine.io"),
    Express = require("express");

var httpPort = 18123;

var engineIOOptions = {
    path: "/engine.io",
    policyFile: true,
    destroyUpgrade: true,
    destroyUpgradeTimeout: 1000,
    pingTimeout: 60000,
    pingInterval: 25000,
    transports: [ "polling", "websocket" ], // polling, websocket, flashsocket
    allowUpgrades: true,
    cookie: "eio"
};

var httpServer = Express.createServer();

var engineIO = EngineIO.attach(httpServer, engineIOOptions);

httpServer.listen(httpPort);

engineIO.on("connection", function(socket)  {
    socket.on("message", function(msg)  { });
    socket.on("close", function() { });
});

Client code:

var socket = eio("ws://<serverurl>:80/", { timestampRequests: true });

socket.onopen = function() {
  socket.onmessage = function(msg) { };
  socket.onclose = function() { };
};

Nginx location directive:

location /engine.io/ {
  proxy_pass http://localhost:18123;
}

Chrome shows the following requests when the error occurs:
Capture

About 20 seconds later, chrome shows the following requests:
Capture

I was testing engine.io 0.5.0 and nginx 1.3.14.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions