J'ai des clients mobiles connectés à un serveur node.js, exécutant socket.io via xhr-polling. J'ai deux types de clients:
Type A
Lorsque la connexion est interrompue en raison de problèmes de réseau (ou que le client se bloque), le délai par défaut du rythme cardiaque est trop long
Type B
Lorsque la connexion est rompue pour ce client, je dois lui donner plus de temps pour récupérer - il est plus important que le client récupère que le serveur ne coupe la connexion/session
Donc, ma question est de savoir comment configurer (si cela est possible) les délais d'attente de pulsation du client réel?
Autant que je sache, il y a 2 valeurs qui importent ici: le serveur envoie des pulsations au client toutes les heartbeat interval
Secondes; le client répond directement, s'il n'y a pas de réponse, le serveur décide que le client est mort. Le client attend un battement de cœur du serveur pendant heartbeat timeout
Secondes depuis le dernier battement de cœur (qui devrait évidemment être supérieur au heartbeat interval
). S'il n'a pas reçu Word du serveur en heartbeat timeout
Secondes, il suppose que le serveur est mort (et commencera à se déconnecter/se reconnecter en fonction des autres options que vous avez définies.
Les valeurs par défaut sont heartbeat interval = 25s
Et heartbeat timeout = 60s
. Les deux éléments sont définis sur le serveur, le heartbeat timeout
Est envoyé au client lors de la connexion.
Changer le heartbeat timeout
Pour un seul client est simple:
var socket = io.connect(url);
socket.heartbeatTimeout = 20000; // reconnect if not received heartbeat for 20 seconds
Cependant sur le serveur, la valeur heartbeat interval
Semble faire partie d'un objet partagé (le Manager, qui est ce que vous récupérez de votre appel var io = require("socket.io").listen(server)
), ce qui signifie qu'il ne peut pas facilement changer pour les prises individuelles.
Je suis sûr qu'avec un piratage de socket.io, vous devriez pouvoir y arriver, mais vous pourriez casser d'autres choses dans le processus ...
Dans socket.io 1.x, l'API a changé mais le concept reste le même.
Au lieu de heartbeatInterval et heartbeatTimeout, les propriétés sont pingInterval et pingTimeout. Par exemple,
var server = app.listen(80);
io = socketio(server,{'pingInterval': 45000});
Voir la documentation sur http://socket.io/docs/server-api/#server (opts: object) , qui vous dirigera vers https://github.com/ Automattic/engine.io # méthodes-1 .
Pour compléter la réponse de Claude, vous pouvez définir ces valeurs au niveau du levier du serveur, avec le code suivant
io.set('heartbeat interval', 5);
io.set('heartbeat timeout', 11);
puis vous pouvez créer 2 serveurs node.js, un pour chaque type de client (A et B), avec 2 jeux d'options souhaités (délai d'attente et intervalle).