Protocolo de comunicación entre distintas plataformas
Actualmente tengo una aplicación que se comunica entre un cliente (celular con j2me) y un servlet.
Los datos que transmito son primitivos, cadenas y contenido multimedia (array de bytes)
Para enviar los datos desde el cliente (celular) lo hago a través de un DataOutputStream, de acuerdo al tipo de dato es el método que utilizo. Por ejemplo: para escribir una cadena lo hago con writeUTF("cadena"), mientras que para escribir un int lo hago con writeInt(entero);
En el mismo orden que escribí los datos en el celular, los leo en el servlet a través de un DataInputStream, readUTF(), readInt().
De la misma manera envío de vuelta datos desde el servlet (escribe a un dataoutputstream) hacia el cliente (le de un datainputstream en el mismo orden que los datos fueron escritos)
¿Qué sucede con la transmisión de datos si el cliente ya no fuera a ser escrito en java j2me; sino en otra plataforma, por ejemplo un iphone, o una aplicación escrita en Symbian, Android, o una terminal escrita en ensamblador?
Me preocupa que los tipos de datos no sean compatibles entre distintas plataformas, por ejemplo que escribir un entero en symbian no sea lo mismo leerlo en java, lo mismo para una cadena, tal vez por los tamaños del tipo de dato o por otras cuestiones que no conozco:
=================================================
Cliente (Symbian)..................................................Servidor(Java)
writeInt()...............................................................readInt()
=================================================
Cliente (Objetive-c).................................................Servidor(Java)
writeString()............................................................readUTF()
=================================================
Debería yo cambiar la forma en la que transmito los datos por una gran cadena separada por delimitadores y luego descomponerla y consumirla (y convertir las imágenes a base64) ? O es correcto lo que estoy haciendo y es mejor entender cómo lee/escribe los distintos tipos de dato java para después transportarlo a otras plataformas?
Qué me recomiendan ustedes?
Muchas gracias por su amable atención
- Inicie sesión o regístrese para enviar comentarios
opciones
Es mejor si utilizas un formato de datos que no sea nativo de tu plataforma actual. En el futuro puede ser que no descontinúes JavaME pero si luego quieres agregar algo nuevo (como mencionaste, iOS, Android, Windows Phone, etc) vas a tener problemas con esos clientes.
También puede darse el caso del otro lado; que la aplicación cliente siga en JavaME pero por una u otra razón decidan migrar de JEE a otra cosa en el servidor.
Revisa protobuf (Google Protocol Buffers) o Thrift, son buenas opciones para comunicación entre plataformas.
Protobuf
Muchas gracias, revisaré protobuf como me indicas.
Como otra opción, crees que sea buena utilizar json como formato de transmisión de textos y el contenido multimedia lo codifique a base64?
si eres rico si
Si no te importa gastar en GPRS, puedes usar JSON y codificar multimedia a base64, o incluso a hexadecimal, para usar dos caracteres por cada byte. Pero si no tienes acciones en Telcel ni eres pariente de Slim, pues mejor usa un formato binario más compacto (tal vez BSON, la versión binaria de JSON) y el contenido multimedia transmítelo como va, no entiendo para qué mandarlo como texto.
Gracias
jajajaja, ok !
JSON, XML, Web Services, son
JSON, XML, Web Services, son las opciones que tienes.