entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Crear Websocket cliente en Java SE y servidor en HTML5

Buenos días comunidad,

Tengo un problema y es que no se como crear un Websocket cliente Java para SE. he visto por Internet multitud de ejemplos pero ninguno me funciona ya que la mayoría hace uso de Netbeans como IDE, yo estoy haciendo uso de Eclipse. yo desearia crear lo mas basico que pudiera enviar datos al servidor HTM5 y que este pudiera enviar datos al cliente que en este caso es Java.

Como digo he visto muchos ejemplos en los cuales modifican el XML para añadir las dependencias y eso es lo que no quiero, yo quiero añadirlas directamente. La gran mayoria hace uso de Jetty en Netbeans.

Mi servidor HTML5:

<script type="text/javascript">
            var mysocket = new WebSocket("ws://localhost:8080");

            mysocket.onopen = function (evt){
                escribir("Websocket abierto");
            };

            mysocket.onmessage = function (evt){
                escribir("RECIBIDO: " + evt.data);    
            };

            mysocket.onclose = function (evt){
                escribir("Websocket cerrado");
            };

            mysocket.onerror = function (evt) {
                escribir("ERROR: " + evt.data);
            }

            function escribir(texto){
                valor = document.getElementById("caja").value;
                document.getElementById("caja").value = valor + texto + "\n";
            }

            function enviar(texto) {
                mysocket.send(texto);
                escribir("ENVIADO: " + texto);
            }

            function desconectar(){     
                mysocket.close();
            }
        </script>

Espero vuestra respuesta, un saludo!

1voto

Leonardo-Tadei comentado

Hola @desarrollador1990,

creo que entiendo más o menos tu problema... lo que no entiendo es qué tiene que ver el código JavaScript que pusiste en tu pregunta.

En ese código hay un cliente conectándo a un servidor que debería estar en la misma PC en que se ejecuta este código y en el puerto 8080.

Tampoco entiendo que tiene que ver el entorno de desarrollo, si es NetBeans, o Eclipse o cualquier otro, ya que el código que se escribe es independiente del propio entorno.

Vos tenés que escribir el servidor? o vas a usar un servidio existente que tiene su API predefinida?

1voto

desarrollador1990 comentado

Hola que tal maestro Leonardo—Tadei.

Pues te comento, tengo una aplicación web en HTML5 la cual tiene una serie de botones, por otra parte tengo una aplicación Java SE Desktop que dispones de unas funciones... asta aquí todo claro, pues lo que pretendo es que dado el botón que se presione en HTML5 capture el evento y enviar un petición al cliente que en este caso es el Java SE Desktop el cual comprobará que opción se ha pulsado y ejecutar la función correspondiente.
A simple vista podría uno podría pensar que la mejor opción es hacer uso de soviets TCP pero como también necesito hilos en PHP no se permite hacer uso de estos de manera nativa(si con pthread y en Linux, etc...) es por eso que pensé en websockets, pero en el lado del cliente no necesito una web sino una aplicación de escritorio.

1voto

radiotvlael comentado

quiero crear mi html5 reproducto para mi web como lo hago

1voto

Peter comentado

@radiotvlael abre una pregunta nueva.

Saludos.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @desarrollador1990,

Me parece que estás mezclando las cosas: si la aplicación HTML5 va a enviar peticiones, entonces esa es el cliente; si la aplicación Java SE Descktop le va a responder las peticiones, entonces será el servidor para este escenario.

En este escenario, no estoy seguro de entender qué tiene que ver con esto PHP: si tu cliente es HTML5, se ejecutará en un navegador y estará escrito en HTML+CSS+JavaScript (que sea un script PHP el que genere alguna o las 3 de estas cosas es irrelevante, porque el código va a correr en el cliente)

Por otra parte, PHP sí soporta manejo de sockets (las funciónes socket_* existen desde PHP 4) pero te reitero que no parece tener que ver con tu problema a solucionar.

Siguiendo con tu problema: tenés que empezar haciendo que la aplicación Java SE Desktop sea un servidor, elegiendo de qué tipo (HTTP, SOAP, REST, Remote Procerure, WebSocket, etc) para luego escribir el cliente, que según tu escenario deberá estar implementado en JavaScript, lo que afortunadamente, te restringe las posibilidades de comunicación y facilita elegir.

Yo te sugiero que empieces por implementar el servidor, y consultes por acá dudas concretas que tengas sobre la implementación. Nosotros no conocemos los detalles suficientes para darte presiciones sobre esto.

Saludos cordiales!

1voto

desarrollador1990 comentado

Hola de nuevo Leonardo-Tadei,

Lo del codigo js que puse no lo tomes en cuenta, unicamente lo puse como ejemplo de "cliente websocket".

Respecto a lo de sockets en PHP se que existen, es mas se que se pueden manejar multiples clientes desde un server socket, el problema esque es "bloqueante" y lo que necesito es hacer uso de cada cliente de manera paralela y es aqui donde esta el eslavon devil de PHP que no implementa de manera nativa Threads, si con librerias externas bajo linea de comandos, en Linux... pero no es lo que busco. Porque para el proyecto que estoy desarrollando no lo veo factible.

Es por esto que digamos que yo ya parto de un servidor websockets(digamos que lo tengo en PHP, node.js, etc...) lo que yo quiero es saber si se puede crear un websocket cliente Java SE de escritorio, es decir una aplicacion .jar y no un "java web aplication", de ser asi digame como podria crearlo.

Pd: yo ya habia trabajado anteriormente en websockets pero nunca me he visto en la situacion de crear un websocket cliente Java SE y un servidor websocket en PHP. Se que el protocolo SW es independiente del lenguaje pero como he dicho nunca me he visto en la necesidad de crear un WS cliente sin utilizar un servidor web.

2votos

Leonardo-Tadei comentado

Hola @desarrollador1990,

Bueno, entonces el código JS de tu pregunta no es parte de tu problema... sigamos.

Tal y como decís, PHP no soporta nativamente threads, pero soon muy raros los escenarios en dónde hagan falta. Tu problema tampoco los necesita. Si el servidor de sockets que tenés que escribir en PHP correrá en un servidor web, cada petición que llegue al script PHP se ejecutará por sí sola en una proceso diferente, por lo que no hay ningún problema ni de bloqueos ni de concurrencia. Recuerda que en el modelo de ejecución web, el servidor (Aqpache por ejemplo) es capaz de atender múltiples peticiones simultáneas al mismo script, y lo hace creando un proceso aparte y autónomo para cada una. La propia implementación de la comunicación HTTP(S) es multithread/multiproceso de forma nativa!

Te haría falta el uso explícito de threads en el caso de que estuvieras desarrollando una aplicación PHP para el escritorio, es decir, que no funcione a través de un servidor web.

Para escribir clientes websocket en Java, buscando aparece mucha información y ejemplos.

Pero volviendo a mi primer respuesta, mientras no tengas escrito el servidor, no tendrá mucho sentido implementar un cliente, porque nadie te va a responder.

Te sugiero que hagas una nueva consulta específica de las dudas que tengas o de dónde te trabes en la implementación del servidor, partiendo del código que propongas para implementarlo. Es muy dificil ayudar a resolver por escrito un problema grande, como es este si lo ves como un todo, pero es muy simple resolver dudas y cuestiones puntuales.

Saludos cordiales!

PD: dado que no existe todavía el servidor, no me queda claro por qué querés implementar una comunicación vía websocket, siendo que una API REST es mucho más simple de escribir y te serviría igual para este problema...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta