我正在尝试编写一个非常简单的游戏客户端,以便对ActionScript3和Flex框架进行一些练习。
我对以下代码有一些问题:
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);
}
}
}在大多数情况下,它在客户端似乎工作得很好,但有时我会感到奇怪,这是不应该发生的行为。如果我查看控制台输出,就会发现有许多"dismissed“数据包。一旦我记录了被丢弃的包的其余部分,它看起来非常像一个损坏的、不完整的包。它开始于字符串的中间,例如,如果数据从服务器快速发送,就会出现这种情况。在服务器端,每个包都是通过调用相关的client.send()函数发送的。
这是尝试处理多个传入对象的错误方式吗?这会不会是一个服务器端问题,导致数据包发送格式错误/不完整?
如果有人能帮我,我会很高兴的。
稍微更新一下,这可能会有帮助:我记录了通过网络发送的数据的长度。日志如下所示(服务器|客户端):
208 | 208
92 | 92
208 | 208 214 | 214 &糟糕,数据包是否被丢弃?Restlength::212
148 | r.bytesAvailable: 388
27 | 388 &糟糕,数据包是否被丢弃?Restlength::384等...
这看起来像是服务器突发数据,而客户端却搞砸了。我可以发布更多什么来获得有关此问题的帮助?我必须手动刷新python服务器上的数据才能正常工作吗?我不太确定发生了什么。我只知道如果我非常非常快地做了很多client.send(),就会发生这种情况,比如它会被缓冲,然后以缓冲区的大小发送,所以它会将数据包切成几个客户端无法读取的部分(因为它显然不会期望这样)。我真的被这个困住了:
PS:服务器是用Python编写的,有一个常见的教程--像TCP套接字和客户端线程。
发布于 2010-09-29 15:42:41
如果你使用的是AMF,我不明白为什么你要从二进制数组中读取字节?
尝试使用RemoteObject和一个响应处理程序(最终也是一个错误处理程序)
这里有一个例子:http://pyamf.org/tutorials/actionscript/simple.html#actionscript (我没有尝试过,因为我不是python专家)
除此之外,记住命令是一发即忘的命令。在处理Flex中的服务器端流量时遇到的主要问题是由于未注册事件侦听器等引起的。服务器调用。
希望能有所帮助
https://stackoverflow.com/questions/3814140
复制相似问题