0

CGIプロセスを介してJSON結果を提供する組み込みシステムがあります。Flexアプリをセットアップしようとしています。サーバーを1秒に1回定期的にポーリングし、GUIを更新します。タイマーを使用して以下のアプローチを試していますが、最初の結果しか得られず、その後の更新は行われません。何がうまくいかない可能性がありますか?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="application1_creationCompleteHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <mx:HTTPService id="getPacketCounts" showBusyCursor="true" resultFormat="text" 
                        url="http://10.1.10.28/cgi-bin/getpacketcounts" 
                        requestTimeout="500"
                        result="getPacketCounts_resultHandler(event)"
                        fault="faultHandler(event)">
        </mx:HTTPService>       
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.FlexEvent;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            private var timer:Timer = new Timer(1000, 0);
            private var counter:int;

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                timer.addEventListener(TimerEvent.TIMER, timerListener);
                timer.start();
            }

            private function timerListener(evt:Event):void {
                label.text = "get http://10.1.10.28/cgi-bin/getpacketcounts";
                getPacketCounts.send();
            }

            protected function getPacketCounts_resultHandler(event:ResultEvent):void
            {
                label.text = event.result.toString().substr(0, 60);
            }           

            protected function faultHandler(event:FaultEvent):void
            {
                Alert.show("The server returned error code " + event.statusCode + ".", event.fault.faultString);
            }               
        ]]>
    </fx:Script>
    <s:Label id="label" text="v1.0"/>
</s:Application>
4

1 に答える 1

1

あなたのコードに明らかな問題は見られませんがTimerHTTPService. あなたは毎秒発火しますが、結果を返すのにTimer時間がかかり、前のリクエストに対するトランプルの次のティックが発生する可能性があります。ただし、これについては 100% 確信が持てません。HTTPServiceTimergetPacketCounts.send()

もし私がこのアプリを書いていたら、Timerが一度起動し、 をリセットしTimer、リクエストを送信HTTPServiceし、応答を待ってから を再起動するように設定しTimerます。

   // Make the Timer run once.
   private var timer:Timer = new Timer(1000, 1);

   // ....

   // Add listeners to the Timer and start it
   protected function application1_creationCompleteHAndler(event:FlexEvent):void
   {
       timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerListener);
       timer.start();
   }

   // Send the request
   private function timerListener(e:TimerEvent):void
   {
       timer.reset();
       // Your other stuff
   }

   protected function getPacketCounts_resultHandler(event:ResultEvent):void
   {
       timer.start()
       // Your code
   }           

   protected function faultHandler(event:FaultEvent):void
   {
       timer.start()
       // Your code
   } 
于 2012-07-20T01:03:14.400 に答える