Bonjour,
Je débute en JAVA. Et je cherche à créer une class qui Bufferise les packets, et les envoies en multithreads. (pour un serveur MMORPG).
Voici un exemple de ce que je veux faire:
addPacket(): Va ajouter un client plus son packet à la collection _buffer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class buffer{ private Map<PrintWriter,String> _buffer = new TreeMap<PrintWriter,String>(); public void addPacket(PrintWriter client, String data); // Ajoute un packet à la liste. (_buffer) public void sendPacket(); // Traite le dernier packet et le retire de la liste. }
sendPacket(): Doit être appelé par un Pool de 6 Threads à la fois. La méthode Prends un client de la collection _buffer et lui envoie son packet, puis le retire de la liste.
Bref, tout ça parait simple et facile à faire, mais le problème que j'ai, c'est que dans la méthode sendPacket(); il y a quelques instructions qui mettent des fois du temps, et ça peut varier. Entre 0 ms à 2 minutes.
Ce qui fait, les 6 threads qui appellent la méthode de la class vont finir par tous planter à un moment donné, et le serveur ne va plus répondre de packets aux clients, car les 6 threads seront tous occupés à attendre l’exécution de la méthode.
Ce que je veux savoir c'est: Est-ce qu'il existe un moyen rapide de dire au thread d’exécuter sendPacket() et ne pas dépasser 100 millisecondes ?
Ce que je veux dire par "rapide" c'est que ça doit être rapide et optimisé, car le serveur doit supporter les 4.000 connectés simultanés. Donc les 6 threads auront un travaille énorme, et sendPacket() sera appelé une centaines de fois par seconde.
2éme question: Map<PrintWriter,String> Est-ce un bon choix pour ce genre de travaille? Est-ce multithread safe? Est-ce assez rapide?
----
Bref, je n'ai toujours pas créer cette class, tout ça est toujours en théorie je cherche juste à avoir des idées avant de me lancer sur son codage. Je débute toujours en Java et je ne veux pas avoir de mauvaise surprises après. N'hésitez pas si vous avez des conseils, ou critiques à faire ou si vous avez une meilleur idée pour remplacer cette class. C'est très important pour moi, merci.
Partager