博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flash的Socket
阅读量:4079 次
发布时间:2019-05-25

本文共 884 字,大约阅读时间需要 2 分钟。

Flash的Socket只支持TCP(10.x之后所谓的UDP支持只是在流数据的实时p2p上才有用),所以目前Comoro的Base也只支持TCP连接,当然改成UDP并不很困难,只是需要注意更多的数据完整性检查。

由于Flash动画是基于帧的,所以Flash的socket也是受帧影响的,as中所有事件也是随帧触发的。比如一个30fps的swf,它每1/30秒检测一遍事件,也就是ENTER_FRAME是最底层的event,一般的键盘持续响应、动画都是基于它来检测的。Socket中的事件也是一样,这就意为着,如果再一个1/30秒内,socket收到1条以上的消息,事件却只触发了一次,于是缓冲内的东西就被会被一次取出,几条消息就粘连到一起了。其它应用平台也会有粘连情况,只是不像flash这么严重,因为它的检测间隔太大,远比什么“cpu时钟级”、“微秒级”高得多。

另外,TCP的连接检测也是非常没谱的。当一个连接断开后,TCP栈可能在2小时的时候才会有消息产生,所以几乎所有的网络程序都会有“心跳”,包括聊天工具、网络游戏等。心跳就是定时向对方发送一条特殊的消息,由对方反馈,如果一段时间内收不到心跳消息或者没有反馈,就可以认为这个连接“死掉”了。

另一个比较严重的问题就是数据丢失及顺序错乱。有人认为TCP是不会丢的,其实丢失不是因为TCP本身,是在路上由于无线信号干扰、路由器拥堵等被丢弃了。反馈消息也许也是由中继路由器返回的,不是真正的送到了接收方。这在网络环境不好的时候经常发生。TCP协议本身有重发机制,假设服务器第一次调用send/write, 发送了表示登录成功的第一条业务消息, 然后再发送表示通知客户端进入游戏大厅的业务消息. 那么, 无论网络如何失败, TCP保证, 如果消息真能到达, 那么必定是第一条先于第二条到达。

基于以上原因,一个稳定的连接,需要一个完整的消息顺序机制,需要有分割已粘连消息的能力。消息的包头至少要包含顺序号和长度才能满足这类需求。

posted on 2009-10-21 14:13 阅读(...) 评论(...)

转载地址:http://dlpni.baihongyu.com/

你可能感兴趣的文章
matlab函数im2bw_图像分割之阈值分割(matlab)(转载)
查看>>
Visual Studio C++与Visual C++ 有什么区别(两个都是一种IED工具,不是某种编程语言!!!)
查看>>
c语言实现灰度图转换为二值图
查看>>
c语言实现BMP图像转换为灰度图
查看>>
VSCode使用---1、VSCode如何运行C++代码
查看>>
vscode下调试运行c++
查看>>
python下使用aruco标记进进行三维姿势估计(转载)
查看>>
aruco_calibration相机标定(ARUCO二维码是可以用来进行相机标定的)
查看>>
Docker镜像备份与迁移(操作系统级别的巨大镜像就可以这样将镜像备份成本地文件)
查看>>
用docker启动ubuntu的桌面环境
查看>>
Linux-Ubuntu下安装python和卸载
查看>>
应该也有别人搭建好的PX4仿真环境的docker
查看>>
Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)
查看>>
Ubuntu安装 Docker CE,VNC访问docker图形界面并安装ROS
查看>>
桌面版docker操作_让docker容器系统拥有图形化桌面
查看>>
linux apt-get autoremove别乱用(转载)
查看>>
docker-ubuntu-vnc-desktop
查看>>
docker镜像也是有tag的,就是不同版本和github一样,所以不用急着直接docker pull,先看看有没有其他版本。
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
rosdep init 错误的终极解决方法
查看>>