2010-09-28 20 views
0

我想寫一個非常普通的遊戲客戶端,以獲得一些Actionscript 3和Flex框架的練習。Flex網絡:如何閱讀多個AMF對象

我有一些問題,下面的代碼:

private function readResponse():void { 
    var r:ByteArray = new ByteArray(); 
    readBytes(r); 
    while (r.bytesAvailable != 0) 
    { 
    try 
    { 
    var d:Object = r.readObject(); 
    protocol.execute(d); // do something with the object 
    } 
    catch (RangeError) 
    { 
    trace("Ouch, packet dismissed? Restlength:" + r.bytesAvailable); 
    } 
    } 
    } 

它似乎在客戶端很好地工作的大部分時間,但有時我得到奇怪的是,不應該occure行爲。如果我在控制檯輸出中看,有很多「解散」的數據包。 一旦我記錄了丟棄的軟件包的剩餘部分,它看起來像是一個破損的未完成的數據包。它從一個字符串的中間開始,例如 如果數據從服務器快速發送,通常會發生這種情況。在服務器端,通過調用相關的client.send()函數發送每個數據包。

這是錯誤的方式來嘗試處理多個對象傳入? 這可能是一個服務器端問題,導致數據包發送格式不正確/不完整?

如果有人能幫助我,我會非常高興。

小小的更新,也許這有助於: 我記錄了通過網絡發送的數據的長度。 記錄看起來像這樣(服務器|客戶端):
208 | 208
92 | 92
208 | 208 214 | 214 &哎呀,包被解僱了? Restlength :: 212
148 | r.bytesAvailable:388
27 | 388 &哎唷,包被解僱了? Restlength :: 384 etc ...

這看起來像服務器突發數據和客戶端搞亂了這一點。 我可以發佈更多以獲得一些有關此問題的幫助?我是否必須在python服務器上手動刷新數據以使事情正常工作?我不確定發生了什麼事。我只知道這種情況大多發生在大部分情況下,如果我處理了很多client.send()非常快的數據,就像它被緩衝,然後發送緩衝區的大小,所以它將數據包切割成幾個不可讀的客戶端(因爲顯然它不期望這樣)。我真的堅持這個:(

PS:服務器是用Python編寫與通常的教程,如TCP套接字和客戶端線程

回答

0

如果使用的是AMF,我不明白你爲什麼會從二進制數組讀取的字節

嘗試使用RemoteObject和響應處理程序(最終也是一個錯誤處理程序)

這裏有一個例子:http://pyamf.org/tutorials/actionscript/simple.html#actionscript (我,因爲我不是沒有試過蟒蛇精明)

除此之外,請記住,命令是火災和遺忘。處理Flex中服務器端流量時遇到的主要問題是未註冊事件偵聽器等。服務器調用。

希望它可以幫助

+0

我使用的AMF,因爲我喜歡在Flex的蟒蛇化/反序列化的簡單方法。我需要一個持續連接並在兩個方向上發送數據。 我認爲這個例子只是關於HTTP請求(也許它也適用於套接字?)? – woosa 2010-09-29 12:48:35