2016-08-04 10 views
0

Es scheint einige Inkompatibilitäten zwischen Socket.IO und Bouncy zu geben: In Chrome und Firefox (nicht in Edge) hängen meine Browser-Tabs, wenn ich mehr als 5 öffne.Probleme mit Socket.IO (> = 1.0) und Bouncy

Ich weiß, es ist durch das NPM-Modul "Bouncy" verursacht, denn wenn ich den Code, der es verwendet, entfernen, funktioniert alles gut und es gibt keine Begrenzung, wie viele Browser-Registerkarten ich öffnen kann. Der andere Schuldige ist die neue Version von Socket.IO (> = 1.0, die ich gerade aktualisiert habe), denn wenn ich auf v0.9.16 zurückgrade, geht auch das Problem weg.

Hier einige relevante Code-Server:

var port = 8502; 
var bouncy = require('bouncy'); 
var socketio = require('socket.io'); 
var express = require("express"); 
var http = require('http'); 
var app = express(); 
var server = http.createServer(app); 
var io = socketio.listen(server); 
server.listen(port); 

var serverBouncer = bouncy(function(req, res, bounce) { 
    var path = req.url; 
    var url = req.headers.host; 
    if (typeof url !== "string") { 
     res.send(500); 
     res.end(); 
     return; 
    } 
    var urlArray = url.split('.'); 
    var bouncePort = port; 
    if (!isNaN(urlArray[0])) 
     bouncePort = parseInt(urlArray[0]); 
    else if (String(urlArray[0]).toLowerCase() === "www" && !isNaN(urlArray[1])) 
     bouncePort = parseInt(urlArray[1]); 
    bounce(bouncePort); 
}); 
serverBouncer.listen(80); 


io.on("connection", function(socket) { 
    //Some events... 
}); 

Hier einige relevante Client-Code:

var client = io.connect(); 

steckte ich habe versucht, dieses Problem für die letzten 3 Tage zu lösen, wird jede Hilfe immens geschätzt .


Update: Hier ist, was die Netzwerk-Registerkarte aus Chrom Entwickler-Tools wie folgt aussieht:

enter image description here


Update 2:

ich die Config von geändert socket.io (serverseitig) um Websock zu erzwingen et:

io.set('transports', ['websocket', 'polling']); 

Das Gleiche gilt für die Client-Seite:

var client = io({transports: ['websocket', 'polling']}); 

Aber jetzt sind die Ereignisse, die ich austrahlen, den Server nicht erreichen. Hier ist, was die Netzwerk-Registerkarte wie folgt aussieht:

enter image description here


Update 3: Versionen der wichtigsten Komponenten:

  • NodeJS V6.2.2
  • Socket.IO v1. 4.8
  • Bouncy v3.2.2
  • Cors v2.7.1
  • Express v4.14.0
  • Npm v3.10.5
+0

Welchen Port haben Ihre socket.io-Verbindungen? socket.io-Verbindungen beginnen als http-Anforderung, so dass Sie sicherstellen müssen, dass bouncy diese zuverlässig an den socket.io-Server weiterleitet. Ein Unterschied zwischen socket.io vor und nach 1.0 ist der neueste Socket.io sendet oft ein paar Nachrichten mit einfachen HTTP-Anfragen, bevor es festgestellt hat, dass webSocket funktioniert, und dann schaltet es auf webSocket um. – jfriend00

+0

Socket.io ist an die App gebunden, die Port 8502 überwacht. Der Bouncy-Server hört Port 80 ab. Was mir in den Sinn kommt, ist, dass es für 5 Browser-Tabs funktioniert und danach Probleme hat ... Downgrade-Socket. io oder das Entfernen von Flummi löst das Problem, aber ich möchte keines dieser Dinge tun. –

+0

Der Grund für den Bouncy-Server besteht darin, Clients auf andere Anwendungen umleiten zu können, die auf anderen Ports mit URLs wie 5555.domain.com ausgeführt werden, ohne Ports auf dem Computer zu öffnen, auf dem der Server ausgeführt wird. –

Antwort