11
votes

Java Websocket Host?

J'essaie des idées de jeu multijoueur pour le moment et j'essaie de créer une application Java pour servir un jeu multijoueur basé sur le navigateur Web.

Mon environnement de développement est Eclipse sur la machine principale et Notepad + Google Chrome sur cet ordinateur portable. p>

Je crée la bande WebSocket à l'aide de JavaScript à l'extrémité du client et à l'aide de la fin du serveur. p>

J'ai réussi à obtenir Une connexion reconnue aux deux extrémités, mais ne peut pas sembler envoyer ou recevoir des données entre eux sans le client fermant la connexion (n'étant même pas une erreur; semble simplement paniquer à quelque chose et appeler socket.close). P >

Quelqu'un a-t-il des idées? p>

Voici quelques-unes CODE: P>

Client: P>

public static void main(String args[])
{
    System.out.printLn("Websocket server test");

    ServerSocket connectSocket = null;

    try
    {
        Socket clientSocket;
        connectSocket = new ServerSocket(10000);
        System.out.printLn("Waiting for connection...");
        clientSocket = connectSocket.accept();
        System.out.printLn("Got one!");

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));

        for(int i=0;i<100;i++) //Shit but easy
        {
            String data = in.readLine();
            System.out.printLn("Got data: " + data);
            out.printLn("YAY!");
        }
    }
    catch (IOException e)
    {
        System.out.printLn("You fail: " + e.getMessage());
    }

    System.out.printLn("Finished!");
}


2 commentaires

Y a-t-il une raison pour laquelle vous n'utilisez pas de serveur WebSockets existant?


Voir cette question pour la liste des serveurs WebSockets prêts à l'emploi: Stackoverflow.com/ Questions / 4278456 / ...


5 Réponses :


11
votes

0 commentaires

-2
votes

Je ne peux pas vous aider avec des sockets, mais puis-je vous suggérer d'utiliser la technologie RMI? J'essaie de faire un RPG multijoueur en Java et j'utilise l'appel de méthodes à distance entre serveur et client (il est possible également de rappeler le client à partir du serveur). C'est vraiment facile l'utiliser, mais il utilise TCP au lieu d'UDP. Dans l'expérience LAN, il n'y a pas de décalage, sur Internet, je n'ai pas encore essayé. Toutefois, si votre jeu tolère simplement un bit en retard entre la demande et la réponse, il n'y a pas de problème. Ceci est le lien de mes classes de mon projet, de mon client et de serveur peut être utile pour vous.


0 commentaires

3
votes

Essayez cette lib - https://github.com/mrniko/netty-socketo Basé sur la prise haute performance LIB Netty. Il prend en charge le dernier protocole de Socket.io Server. Plusieurs transports, y compris Websocket B>. P>

sur la touche Web Utilisez Socket.io Client JavaScript LIB: P>

<script type="text/javascript">
    var socket = io.connect('http://localhost:81', {
      'transports' : [ 'websocket' ],
      'reconnection delay' : 2000,
      'force new connection' : true
    });
    socket.on('message', function(data) {
         // here is your handler on messages from server
    });

    // send object to server
    var obj = ...
    socket.json.send(obj);
</script>


0 commentaires

2
votes

Je suggérerais notre solution de haut niveau: serveur de bristleback . Il contient à la fois des serveurs et du client, vous pouvez choisir parmi plusieurs moteurs Websockets de niveau bas existants (comme une jetée, Netty ou Tomcat), développer avec une bristleback est extrêmement rapide et facile. Cependant, il s'agit toujours de bêta et nous travaillons dur pour libérer une version finale 1.0.0. Si vous utilisez Maven, nous avons fourni un archétype avec une application Web prête à utiliser.

Je suis l'un des co-créateurs de Bristleback Server.


0 commentaires

1
votes

Comme personne n'a pas vraiment répondu à votre question: la raison pour laquelle il ne fonctionne pas, c'est que vous n'ayez pas implémenter la spécification WebSocket. Il faut beaucoup plus de travail pour configurer une connexion WebSocket appropriée que d'ouvrir une prise de courant, car la configuration de la connexion WebSocket démarre avec une demande de mise à niveau HTTP. Votre client ferme la connexion, car elle ne reçoit pas de réponse positive sur la demande de mise à niveau pour commencer.


1 commentaires

Ivo Wetzel a répondu à la question à cet effet, il y a sept ans.