Pregunta

Me han encargado con la creación de un cliente para un servidor AS3 HTML5 WebSocket.

Mi pensamiento inicial es la creación de este servicio a través de algunas de las clases existentes en AS3, es decir, el intento de emular RemoteObject, pero después de haber mirado en él, no puedo ver el punto de la ASyncToken!

entiendo el token se utiliza como una forma de referencia entre el servidor de llamadas y su respuesta, pero simplemente no puede ver dónde / cómo se convierte un identificador único.

Tome este breve fragmento de código, por ejemplo:

 var token:AsyncToken = myService.myCall(params);
 news.addResponder(new Responder(onResult, onFault));

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }

Es evidente que el token tiene su propia respuesta, y el servicio puede mantener un diccionario de fichas-mensajes, pero si tuviera que llamar myService.myCall dos veces, antes de que sea responde, sería el know servicio que contadores a asociar con la respuesta? ¿El servicio crea un identificador único para asociar la parte posterior respuesta a la ficha, o sería fallar bajo estas circunstancias?

Si no almacenar internamente su propio identificador único para las llamadas, cómo habría de ser mejor que saltarse el token por completo y pasar la respuesta de los parámetros de llamada? Por ejemplo.

 myResponder = new Responder(onResult, onFault);
 myService.myCall(myIResponder, <additional params>);

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }
¿Fue útil?

Solución

Dos cosas se destacan:

  1. Se puede asignar más de una respuesta a una AsyncToken;
  2. Usted puede unir el resultado de la AsyncToken.

Se puede encontrar estas dos cosas útiles dependiendo de qué tipo de datos que está trabajando ... También puede haber más que esto.

Otros consejos

Para aplicaciones más complicadas, el AsyncToken le permite tener un poco más de flexibilidad en lo que las funciones / cierres / métodos para la recepción de datos o errores de manejo.

public function mssqlQuery(sql:String,fid:String) : void {
    var http:HTTPService = new HTTPService;
    var parm:Object = new Object;
    parm.fas_sql = sql;
    parm.fas_db = mssql_db; 
    http.url = mssql_url+"?irand="+Math.random();
    http.showBusyCursor = true;
    http.request = sql;
    http.addEventListener(ResultEvent.RESULT, mssqlResult);
    http.addEventListener(FaultEvent.FAULT, mssqlFault);
    http.method = "POST";
    sqlToken = http.send(parm);
    sqlToken.param = fid;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top