Mimic UDP with TCP

Hi,

My problem was: I have a game (CatchChallenger), I need update the player position on other player, but if newer data is here, not send the old data. Not send all vector change (pos + direction). But my game is in TCP.

Put the socket buffer to small size, if you do it into:

  • Async: when EEGAIN receive, store the last pos into buffer with method: last data override the content, when you don’t have EEGAIN you can start send the buffer
  • Sync: You need use thread, it’s same method as above, but you don’t use EEGAIN, just: bool eegain=true;write(data);eegain=false;

As this you have: packet in writing (then can’t change), X dropped data due to wait of writing buffer free, and the last pos send. Exactly as UDP, but with the TCP advantage as packet order (and the small tcp packet overhead)

If you like this tips, follow me on facebook and linkedin.

Cheers,

P2P pour CatchChallenger

Salut,

Le P2P est pour le backbone de CatchChallenger. Pourquoi?

Le but premier été de supprimer le Single Point Of Failure, ou le seul point unique qui pouvez tomber tout le réseau.

Bien que pratique, le TCP (surtout avec le chiffrement), posais beaucoup de problème avec le P2P, surtout ce point: ont ne pouvais pas se connecter sur le port émetteur, donc il fallarais se connecter sur un autre port (transmit d’en face, sans garantie qu’il soit fonctionnel).

J’avais besoin d’un réseau sécurisé (authentifier de forme générale, chiffré à certain endroit). L’UDP est sensible as un certain nombres d’attaques (comme les attaque replay). Le protocole UDP est souvent utilisé comme amplificateur. J’ai donc du redévelopper une couche dédié pour répondre à ces besoins.

J’ai besoin d’être résistant a une node compromis, donc pouvoir blacklister sa clef publique. J’utilise un dérivé des autorités de certification pour faire que la clef publique est reconnu par le réseau et une clef maitre broadcast des clef a ban sur le réseau (et autre ordre).

Cela m’as fait travailler sur beaucoup de domaine parallèle (Database NoSQL + lockless), maintenant je suis dans la phase d’implémentation.

Bye