Top Banner
Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp
22

Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Dec 15, 2014

Download

Technology

Integración de Kaazing, ActiveMQ, Javascript mediante STOMP, para evitar pooling en entornos web.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Page 2: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

¿Qué es Kaazing Gateway?

● Es un open source HTML 5 WebSocket Server.● Proporciona comunicación full-duplex entre el

navegador y cualquier servicio back-end basado en TCP.

● Si el navegador no soporta WebSocket, la conexión entre los navegadores y Kaazing Portal Server es emulado con dos conexiones HTTP.

● Soporta varios protocolos, entre ellos STOMP, que permite la comunicación con populares implementaciones de JMS como Apache ActiveMQ.

Page 3: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

¿Qué es Apache ActiveMQ?

● Es un Message Broker open-source.● Soporte de varios lenguajes de cliente (Java, C, C++,

C#, Ruby, Perl, Python, PHP)● Soporte de varios protocolos (OpenWire, REST, Stomp,

WS Notification, XMPP, AMQP)● Total soporte de JMS 1.1 y J2EE 1.4

Page 4: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

¿Qué es JMS?

● JMS es la solución creada por SUN para el uso de colas de mensajes.

● Dos modelos de la API JMS:– Modelo Punto a Punto (point to point): Hay dos clientes, uno

que envía el mensaje y otro que lo recibe. El mensaje siempre llega. Si el receptor no esta disponible para recibir el mensaje, el mensaje es enviado y se guarda en cola. Cuando entre el receptor, recibe el mensaje.

– Modelo Publicador/Suscriptor (Publish/Subscribe): Hay varios clientes. Los que publican temas o eventos y los que ven estos tópicos.

● Son clientes los que envían como los que reciben.

Page 5: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

¿Qué es STOMP?

● Streaming Text Orientated Messaging Protocol● Proporciona un formato para que un cliente Stomp

pueda comunicarse con cualquier Stomp Message Broker (Apache ActiveMQ).

● Clientes Stomp (C, C++, C# and .Net, Delphi, Flash, Java o Gozirra, Perl, PHP, Pike, Python, Ruby and Rails, Smalltalk)

● Stomp Brokers (Apache ActiveMQ, StompConnect, StompServer, Gozirra)

Page 6: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Diagrama

Page 7: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Diagrama

● Servidor Web Apache sirve una página HTML (con PHP también puede ser) al cliente.

● El cliente se conecta mediante la librería de Stomp al servidor Kaazing Gateway, y se subscribe a un canal (o varios)

● El servidor Kaazing Gateway crea un proxy TCP con el servidor ActiveMQ.

● El cliente envía datos a un canal (mediante Javascript) a Kaazing. Kaazing lo reenvía a ActiveMQ. ActiveMQ envía esos datos a todos los clientes conectados al canal, incluido Kaazing. Kaazing lo manda a todos los conectados, incluido el cliente que lo ha mandado.

Page 8: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Diagrama

● En el servidor web Apache, hay un script en PHP corriendo continuamente.

● Está conectado al servidor ActiveMQ. Manda datos al servidor y a un canal específico. No necesita de Kaazing para mandar datos vía Stomp.

● ActiveMQ recoge los datos y los manda a todos los clientes conectados a ese canal, incluido Kaazing.

● Kaazing recoge los datos y los reenvía a todos los clientes conectados a ese canal mediante la librería de JavaScript.

Page 9: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Instalación de Kaazing y ActiveMQ

● Descargamos las últimas versiones de:● http://www.kaazing.org/confluence/display/KAAZING/Download● http://activemq.apache.org/download.html

● Descomprimimos los archivos. En Apache ActiveMQ no cambiamos nada, lo dejamos tal como viene.

● Editar el fichero conf/gateway-config.xml de Kaazing.● Entre las etiquetas <gateway-config> y </gateway-

config> solo nos interesa un proxy a una dirección tcp para conectarnos con el Apache ActiveMQ usando el protocolo STOMP.

Page 10: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Configuración de gateway-config.xml

● Todo lo que esté entre <gateway-config> lo comentamos y ponemos lo siguiente.<!­­ Proxy to STOMP server ­­><service><!­­ ws:// scheme refers to WebSocket ­­><!­­ wss:// scheme refers to WebSocket (secure) ­­><accept>ws://websocket.irontec.com:8001/activemq</accept><accept>wss://websocket.irontec.com:9001/activemq</accept>

<type>proxy</type><properties><connect>tcp://websocket.irontec.com:61613</connect></properties>

<cross­site­constraint><allow­origin>http://websocket.irontec.com:80</allow­origin><allow­origin>*</allow­origin></cross­site­constraint></service>

Page 11: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Configuración de gateway-config.xml

● <accept>● ponemos las conexiones que vamos a aceptar para este servicio.

Son de tipo ws (web socket) y wss (web socket secure). Cuando un cliente se quiera conectar mediante JavaScript tendrá que hacerlo a esta dirección.

● <connect>● ponemos la dirección del servidor Apache ActiveMQ, y el puerto

donde va a escuchar el protocolo STOMP, por defecto en el 61613.

● <allow-origin>● hay que indicar desde donde permitimos acceder al servicio. Si

ponemos *, aceptamos las peticiones desde cualquier sitio. Si queremos restringirlo solo al nuestro, ponemos su dirección. Se pueden poner varios.

Page 12: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Activar los servicios

● Entramos en la carpeta bin dentro del Apache ActiveMQ y ejecutamos ./activemq.

● Entramos en la carpeta bin dentro del Kaazing Gateway y ejecutamos ./gateway-start

Page 13: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Librerías JS y PHP

● Una vez que ya tenemos los dos servicios corriendo, nos queda programar la parte del cliente. Vamos a usar unas librerías JS que vienen con el Kaazing, que se encargarán de emular los WebSocket, para poder conectarnos vía JavaScript al servidor. Dentro de web/html5 cogemos la libreria ByteSocket.js y de web/protocol cogemos StompClient.js. Con estas dos, ya nos vale para conectarnos con JavaScript.

● También vamos a necesitar una librería de PHP, que vamos a usar para mandar datos. Para bajarla, vamos a http://code.google.com/p/stompcli/downloads/list.

Page 14: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.php

● En primer lugar hacemos el script PHP. Vamos a hacer que el script envíe cada cierto tiempo (entre 1 y 5 segundos, de forma aleatoria) un número entre 1 y 100.

● Creamos un objeto Stomp conectándonos a tcp://websocket.irontec.com:61613 (que es donde Apache ActiveMQ va a escuchar el protocolo Stomp)

● Enviamos datos a un canal de esa dirección tcp (vamos a usar el canal /topic/test)– $con->send("/topic/numbers", $numero);

Page 15: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.php

<?php//Necesitamos la librería Stomp.php que hemos bajado require_once("./phpstomp/Stomp.php");//Creamos un objeto Stomp, conectandonos al servidor que va a escuchar el Stomp$con = new Stomp('tcp://websocket.irontec.com:61613');$con­>connect(); //Hacemos la conexión//Un bucle infinito si queremos que esté siempre enviandowhile (true) {

$time = rand(1,5); //Tiempo aleatorio de espera$numero = rand(1,100); //Número a enviar//Enviamos el numero al canal "numbers"$con­>send("/topic/numbers", $numero);sleep($time); //Hacemos una pausa

}$con­>disconnect(); //Desconectamos?>

Page 16: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.html

● Vamos con el html. Ponemos un input para hacer un mini chat, a la vez que se reciben los números del php anterior. En la página html solo vamos a tener incluidos los archivos js que nos hacen falta (ByteSocket y StompClient para los websockets, JQuery, y tutorial.js donde meteremos nuestro código para recibir y mandar datos a través de Stomp.<script src="ByteSocket.js"></script><script src="StompClient.js"></script><script src="jquery­1.3.2.min.js"></script><script src="tutorial.js"></script>

Page 17: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.html

● Esto es el código que va dentro del <body><div style="margin: 10px; width:300px; float: left; border: solid #000 1px;"><input type="text" size="20" name="texto" id="texto" />&nbsp;<input type="button" name="boton" id="boton" value="Enviar" /><div id="divtexto"></div></div><div id="divnumeros" style="margin: 10px; float: left; width:300px; border: solid #000 1px;"></div>

Page 18: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.js

$(document).ready(function(){var stomp; //Variable donde vamos a guardar el objeto Stompstomp = new StompClient(); //Creamos el objeto Stompstomp.onopen = function(headers) {

//Cuando se conecte al servidor Kaazing, nos subscribimos al canal /topic/chat y /topic/numbers, para recibir los datos que se envíen a esos canalesstomp.subscribe("/topic/numbers");stomp.subscribe("/topic/chat");

}//Cuando se reciban datos de la conexiónstomp.onmessage = function(headers, body) {

//En body se guardan los datos que se reciben//En headers[“destination”] indica a que canal se han mandado los datosif (headers[“destination”] == "/topic/numbers") {$("#divnumeros").append("<p>El número es: "+body);} else if (headers[“destination”] == "/topic/chat") {$("#divtexto").append(body);}

}

Page 19: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

tutorial.js

stomp.onclosed = function(headers) {//Si se desconecta, podemos meter código para reconectar de nuevo o sacar un alert

}//Hacemos la conexión al servidor Kaazing. Username y password lo dejamos vacio.stomp.connect("ws://websocket.irontec.com:8001/activemq", {username:"", password:""});

$("#boton").bind('click',function(){if ($("#texto").val() != "") {

//Al dar a enviar, mandamos al canal /topic/chat lo escrito en el inputstomp.send($("#texto").val(),"/topic/chat");$("#texto").val("");

}}});

Page 20: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Ejecutando el tutorial

● Ya tenemos los 3 archivos. Abrimos tutorial.html desde el navegador http://websocket.irontec.com/tutorial.html desde 2 ordenadores (o 2 navegadores) para probar el mini chat.

● Si escribimos en el input y damos a enviar, se ira añadiendo el texto debajo del input, en todos los navegadores donde tenga abierta la página.

● Para mandar los datos desde tutorial.php lo ejecutamos desde consola con “php tutorial.php” e irán apareciendo los números a la derecha del mini chat.

Page 21: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Licencia Copyleft

Copyright

Page 22: Kaazing Gateway + Apache Active MQ + Javascript + Stomp

Kaazing Gateway + Apache ActiveMQ + JavaScript + Stomp

Licencia Copyleft

● Este documento está protegido bajo la licencia Reconocimiento-SinObraDerivada 2.1 España de Creative Common (http://creativecommons.org/licenses/by-nd/2.1/es/)David Lores <[email protected]>Copyright © 2009 Irontec <[email protected]>

Se permite la copia, modificación, distribución, usocomercial y realización de la obra, siempre y cuando sereconozca la autoría de la misma, a no sea ser que seobtenga permiso expreso del autor. El autor no permitedistribuir obras derivadas a esta.

Esta nota no es la licencia completa de la obra, sinouna traducción de la nota orientativa de la licenciaoriginal completa (jurídicamente válida).