Вопрос

Мне было поручено создать клиент AS3 для сервера HTML5 WebSocket.

Мое первоначальное мышление состоит в том, чтобы создать эту услугу, используя некоторые из существующих классов в AS3, а именно попытку подражать удаленному объекту, но, посмотрев на него, я не могу увидеть точку зрения Asynctoken!

Я понимаю, что токен используется в качестве какой -то формы ссылки между вызовом сервера и его ответом, но я просто не вижу, где/как он становится уникальным идентификатором.

Возьмите этот короткий кусок кода, например:

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

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

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

Очевидно, что в токене есть свой собственный респондент, и у сервиса может сохранить словарь токенсажеса, но если бы я позвонил MyService.Mycall дважды, прежде чем любой ответ, знает ли служба, с каким токеном связать ответ? Создает ли служба уникальный идентификатор, чтобы связать ответ обратно с токеном, или он потерпит неудачу в этих обстоятельствах?

Если он внутренне хранит свой собственный уникальный идентификатор для вызовов, как бы лучше пропустить токен и передавать респондента в параметрах вызова? Например

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

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

 function onFault(event:FaultEvent) {
   // do stuff
 }
Это было полезно?

Решение

Две вещи выделяются:

  1. Вы можете назначить более одного ответа на Asynctoken;
  2. Вы можете связать результат Asynctoken.

Вы можете найти эти две вещи полезными в зависимости от того, с какими данными вы работаете ... также может быть больше, чем это.

Другие советы

Для более сложных приложений Asynctoken позволяет вам немного больше гибкости в каких функциях/закрытиях/методах для приема данных или ошибок обработки.

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top