2011-05-26 22 views
27

¿Cómo se ve el formato de datos de las llamadas RPC de Google Web Toolkits (GWT) y cómo se transmiten los objetos IsSerializable? Sé que Java Serializable transmite algún tipo de formato binario, pero ¿es este el caso también con GWT? (Ya que no espero que sea compatible con JavaScript, o al menos requiera un análisis adicional).GWT Formato de datos RPC

Respuesta

48

EDIT: Brian Slesinsky simplemente documenta el protocolo (por ingeniería inversa del código): https://docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit

En primer lugar, el protocolo GWT-RPC es asimétrico de manera que siempre está optimizado para el lado del cliente: rápido deserializar algo que viene del servidor, y rápido para serializar algo para enviarlo.

Obviamente no es binario, como sospechabas, sino basado en texto. el protocolo de cliente a servidor está delimitado por canalización mientras que el servidor por cliente se basa en JSON (con un prefijo //OK o //EX para indicar si la solicitud tuvo éxito o no). Ambos usan el conocimiento común de las clases serializables para serializar/deserializar; por ejemplo, ambos lados saben que la clase X tiene dos campos, un entero y una cadena, serializados en ese orden, por lo que ambos escriben/leen un entero, y luego una cadena, sin necesidad de especificar en el formato codificado qué campo es acerca de.

El protocolo GWT-RPC está versionado (cambia regularmente a medida que se lanzan nuevas versiones de GWT) y utiliza hashes de los nombres de las clases y campos serializables para garantizar que tanto el cliente como el servidor usan las mismas versiones de las clases (lo que significa tiene que volver a compilar y volver a implementar su código de cliente cada vez que cambie una clase serializable).

La mejor documentación es el código, pero encontrará una visión general del formato de solicitud en estas diapositivas: https://www.owasp.org/images/7/77/Attacking_Google_Web_Toolkit.ppt

RequestFactory, contrariamente a GWT-RPC, utiliza un protocolo basado en JSON simétrico (basado en de AutoBean Serialización JSON) donde el cliente y el servidor pueden comunicarse incluso cuando no se compilan desde el mismo código (bueno, dependiendo de los cambios que haya realizado entre las versiones, por supuesto), ya que pasan nombres de clases y propiedades.

+1

excelente respuesta, ¿entiendes alguna implementación java para GWT_RPCs? – Stefan

+0

Google me cuenta acerca de http://code.google.com/p/gwtphp/ y http://code.google.com/p/python-gwt-rpc/, pero se ven abandonadas (y RequestFactory es el camino a seguir , pero no estoy al tanto de ninguna implementación que no sea Java) –

+0

gracias de nuevo. De acuerdo con esto, cuando quiero hablar con ninguno de los servidores Java, RPC no es el camino a seguir, debería recurrir al protocolo personalizado JSON o XML. – Stefan

Cuestiones relacionadas