Hola a todos!
Agradecería mucho si alguien puede ayudarte en este tema:
Estoy usando xmlsocket para crear un chat, donde el cliente es flash. Para ello hace falta un servidor de sockets. Esto lo tengo y funciona bien, está hecho en java. Lo que me sucede es que los datos se comunican bien del cliente flash al
servidor y viceversa, pero no como debe. Para ilustrar el problema primero les escribo el código de actionscript y luego les aclaro más la problemática:
/* INICIO CODIGO */
// funcion invocada cuando se conecta al socket
function myOnConnect(success) {
if (success) {
trace ("Connection succeeded!")
} else {
trace ("Connection failed!")
}
}
//declaracion del socket
var socket = new XMLSocket();
// evento de conexion al socket
socket.onConnect = myOnConnect
if (!socket.connect("localhost", 2789)) {
trace ("Connection failed!")
conexion.text = "KO";
}else
{conexion.text = "OK";
}
// funcion de envio de un xml a traves del socket
function sendData() {
var myXML = new XML();
var mySend = myXML.createElement("nodo");
mySend.attributes.myData = "eureka";
myXML.appendChild(mySend);
trace("antes de enviar..");
socket.send(myXML);
trace("despues de enviar..");
}
// el botón envía los datos cuando se pulsa
EnvioMensaje.onPress = function() {
datos.text="press";
sendData();
};
// evento producido al recibir datos por el socket
socket.onData = parsear;
function parsear(cadena){
trace(cadena);
}
// evento producido al recibir xml por el socket
socket.onXML = myOnXML;
function myOnXML(doc) {
datos.text = "recibido!";
}
/* INICIO CODIGO */
Explicación: en el flash simplemente tengo un boton y unos cuadros de texto. Al reproducir el flash, se abre un socket a traves del puerto 2789 en localhost. Cuando pulso el boton teoricamente se envia un xml, y cuando se recibe aparece en la ventana de salida el texto recibido y también en los cuadros de texto.
Pues bien, la conexion con el servidor de sockets se realiza sin problemas. Pero al pulsar el boton, parece como que los xml se quedan retenidos y no se envian en tiempo real. Digo que parece porque cuando reproduzco 3 flash distintos (el cliente flash del chat) para simular el chat, y a cada uno pulso su boton de envio, no pasa nada, pero si cierro uno de ellos entonces toda la informacion retenida anteriormente aparece en el servidor de sockets y este a su vez lo reenvia adecuadamente a los otros dos flash todavía en activo.
Es decir, la conexion se realiza perfectamente, pero el envio de datos parece quedarse en algun buffer, o simplemente retenido hasta que uno de los flash es desconectado.
¿Pueden ayudarme? ¿Hay algún tipo de seguridad que impida el envío en tiempo real a través de sockets abiertos?
Muchas gracias por su atención.