Socket.io déconnecter ne se déclenche pas lorsqu’il est accédé via un proxy Apache

J’essaie de configurer un simple serveur socket.io express et de le connecter via un proxy apache vhost sur le port 80. Le serveur express s’exécute sur le port 3456, mais le réseau sur lequel nous testons à partir du trafic de blocs, et le réseau le le serveur express est hébergé sur le trafic des blocs. (pour les ports non inclus dans la liste blanche)

Ceci est principalement destiné à aider une preuve de concept pour le projet, dans une phase de prototypage précoce.

En travaillant sur les ports, j’ai installé un vhost sur le serveur:

 ServerName project.test.company.com ServerAlias www.project.test.company.com ProxyPass / http://localhost:3456/  

Project.test.company.com serait l’URL utilisée avec “project” et “company” remplacés.

Cela fonctionne comme je l’avais espéré, en transférant le trafic sur le serveur VHost sur le serveur express en évitant les problèmes de ports bloqués. Toutefois, lors de la fermeture du navigateur / client connecté, il faut un peu plus d’une minute avant que la déconnexion se produise sur le serveur. Je devine une sorte de déclenchement de timeout. Lorsque vous parlez directement à: 3456 au lieu du vhost (y accéder localement via un vpn), la déconnexion se produit instantanément. La déconnexion fonctionne comme prévu si une fermeture / déconnexion réelle est effectuée par le client au lieu de fermer le navigateur.

Le vhost pourrait-il être écrit différemment pour ne pas avoir cette bizarrerie?

Pour reproduire le problème, voici une version fonctionnelle de base du code utilisé.

Server index.js:

 var app = require('express')(); var server = require("http").Server(app); var io = require('socket.io')(server); server.listen(3456); app.get('/', function(request, response) { response.sendFile(__dirname + '/client.html'); }); var users = []; io.on('connection', function (socket) { console.log('* Client joined: ' + socket.id); users.push(socket.id); io.emit('users', users); socket.on('disconnect', () => { console.log('* Client disconnect: ' + socket.id); users = users.filter((user) => { return user !== socket.id; }); io.emit('users', users); }); }); 

client.html:

         

Users

{{ user }}
var socket = io(); new Vue({ el: '#main', data: { users: [] }, mounted: function() { socket.on('users', (users) => { this.users = users; }); } });