我想寫一個非常普通的遊戲客戶端,以獲得一些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套接字和客戶端線程
我使用的AMF,因爲我喜歡在Flex的蟒蛇化/反序列化的簡單方法。我需要一個持續連接並在兩個方向上發送數據。 我認爲這個例子只是關於HTTP請求(也許它也適用於套接字?)? – woosa 2010-09-29 12:48:35