2015-08-06 1 views
2

J'ai développé un client Java qui établit une connexion à un serveur à l'aide de sockets Java. Pour l'échange d'informations, j'ai utilisé http-Protocol. Fondamentalement, je fais une connexion via une socket et j'ai écrit une méthode sur le côté client qui fait des demandes http au serveur. Le serveur, auquel je me connecte est un serveur très simple que j'ai développé par moi-même. Je veux demander s'il est possible de faire un long sondage en utilisant la méthode de requête via des sockets.longue interrogation à l'aide de java-sockets

Depuis que j'ai une demande méthode dans mon client de classe, j'ai deux options: une demande continue: consiste à envoyer chaque milliseconde une demande demandant, si un nouvel événement a eu lieu. Une requête prolongée (appelée interrogation longue): le client envoie une requête. Le serveur répondra, s'il a la réponse. Sinon, il n'enverra pas de réponse et la requête expirera. A cette époque, le client envoie une nouvelle demande

Voici une description de mon modèle:

I wrote a simple http-client and a simple http-server. 
*The client has a method request 
* the server has a method respond. 
*The client send a get-request by using its request-method to my server (gives back a command to the client) 
**That server reponds to this request using its respond-method. 

Comment puis-je prolonger mon programme? Comment puis-je implémenter une interrogation longue en utilisant mon client et mon serveur disponibles?

+1

Définir 'interrogation longue'. Vous êtes limité par la sémantique de HTTP. Pas clair ce que vous demandez. – EJP

+0

J'ai déjà programmé un modèle client-serveur: un client et un serveur. J'ai donc écrit un simple http-client et un simple http-server. Le client a une demande de méthode et le serveur a une méthode répondre. Le client envoie une requête get en utilisant sa requête de méthode à mon serveur et ce serveur répond à cette requête en utilisant sa méthode response. Le programme fonctionne bien. Comment puis-je étendre mon programme. Comment puis-je implémenter une longue interrogation en utilisant mon client et mon serveur disponibles? – amitakCs

+0

Que voulez-vous dire par un long sondage? –

Répondre

1

Je dirais que pour une solution simple (performance et autres laissés de côté) vous n'avez pas besoin de faire grand chose: Vous demandez un "événement" du serveur. Le serveur accepte les requêtes dans une boucle et délègue le traitement de chaque requête à un thread différent (voir java.util.concurrent.ExecutorService). Chaque thread de traitement attend qu'un événement soit disponible (vous pouvez utiliser java.util.concurrent.BlockingQueue) et répond à la demande. S'il y a un timeout configuré (voir Socket.setSoTimeout, il est possible qu'il n'y ait aucun timeout) et que le timeout se soit écoulé (java.net.SocketTimeoutException), le client peut fermer la connexion existante et se reconnecter.

Pour des raisons de stabilité, je définirais un timeout (long), sinon une connexion cassée pourrait ne pas être reconnue.

Si vous avez beaucoup de clients, pensez à utiliser des E/S non bloquantes sur le serveur. Avec un ServerSocket traditionnel, chaque client bloquera un thread. Si ce n'est pas un problème, restez dans ServerSocket car c'est moins compliqué et plus intuitif.

Si vous ne voulez pas réinventer la roue, jetez un oeil à Jetty ou des bibliothèques similaires pour la partie HTTP. Vous pouvez toujours avoir la même structure, mais au lieu d'un flux binaire simple, vous obtiendrez un joli HttpRequest.