上周把桌面共享做好之后,发现一个bug,在我写的flash server中如果客户端调用服务器端函数发送一个很大的数据的时候,如果这个时候再调用一个其他的函数,
接收数据的客户端会死掉,上周一直都在弄这个问题,很烦,把fms的数据包再分析了一次也没有少处理了什么数据。
今天问题终于发现了,这个问题很隐藏和fms数据包也没有关系,竟然是我写的软件底层有问题。
网络发送部分有问题,一直以来我都当boost::asio::async_write 会按照写入的顺序去发送数据,原来不是这样。
我写的flash server用了这么久,一直没出现这个问题,大概还是因为,我只是在自已的电脑上面测试吧。
一直以来发送的数据包比较小,完成得比较快,而现在这个数据很大,问题就体现出来了。
看来,发送数据还是要自已来控制顺序比较好。
在代码中增加一个发送队列,不再没发送完,就async_write ,问题终于好了。客户端自动把连接断开还是因为发送的数据错乱,解析包出错,所以直接断开。
这几天一直在想这问题,没想到是这个,我还真担心是我的flash server对于rtmp协议有什么地方没有处理完全造成的这个问题。
分析末知的数据包和协议真是一件痛苦的事。
还好,都解决了,终于又有了一件值得高兴的事。
任重道远啊!!!