2010-07-20 3 views
0

Je travaille avec la classe ServerSocket et fils ouverture lorsqu'un nouveau client frappe ServerSocket:ServerSocket (port) et thread multiples fonctionne bien pour 5000 clients simultanés hits?

serverSocket = new ServerSocket(port); 

while (true) { 
     Socket clientSocket = serverSocket.accept(); 
     new Thread(this).start();//opening multiple threads 
} 

mais quand 5000 clients hits sur cette ServerSocket une erreur apparaît sur le côté client: java.net.ConnectException: Connection refused: connect

S'il vous plaît dites-moi quelle est la meilleure façon d'ouvrir une socket servers pour qu'elle accepte toutes les connexions client? il y a un intervalle de temps de 1 milliseconde entre les connexions client simultanées.

+0

Que dit le journal du côté serveur? Peut-être avez-vous besoin d'ajuster les limites du descripteur de fichier. –

+0

il n'y a pas d'erreur sur le côté serveur, cela fonctionne très bien. Problème de refus de connexion côté client au moment de la connexion au socket. clientSocket = new Socket ("localhost", port); quelle est la limite du descripteur de fichier et comment l'ajuster? – java2485

Répondre

1

Il y a 2 choses que vous devriez vérifier.

Limite du descripteur de fichier. Sur un système basé sur Linux, vous pouvez vérifier cela en utilisant ulimit. En second lieu, les serveurs ont une taille de file d'attente, si vous avez plus de connexions en attente que la taille de la file d'attente, ils seront immédiatement refusés. Vous devriez essayer le constructeur ServerSocket (port, backlog).

+0

En plus de cela, vérifiez votre RAM. 5000 threads, chacun utilisera par défaut 256k (en fonction de l'OS, etc., pourrait être 512k) pour sa pile. Cela ajoute, vous pourriez manquer de mémoire virtuelle sur un système 32 bits. – nos

Questions connexes