网络同步带来的bug
说一下之前遇到的bug,首先贴点代码
public class TcpSession : ITcpSession
{
private Socket _appSession;
private AutoResetEvent _signal = new System.Threading.AutoResetEvent(false);
…………
}
这个类里维护了一个sokect连接,和一个AutoResetEvent 对象,作用待会儿再说,首先一个连接产生(工作者线程,即真正使用连接的线程)以后,会加入到连接列表中,连接列表由一个"单独监听线程"维护,这个线程始终存在,每一次工作者线程发送完数据就会就会通过_signal 调用_signal.WaitOne(timeOut); (timeOut是int型的超时时间),将自己挂起,直到超时或监听线程监听到数据后通过所维护的列表调用_signal.set()将工作者线程唤醒。
但是这里存在一个隐含的bug,导致这个bug的关键就在于 这个timeOut,首先我们要执行两次数据发送,第一次发送完将自己挂起,等待被唤醒,但是由于网络慢,数据一直没来,导致超时。程序继续往后运行,工作者线程又发了一条数据将自己挂起,等待被唤醒,此时第一次发送数据的返回数据到了,监听线程就要执行唤醒操作,但是在等待的是第二次发送数据请求,也就导致了数据错误。
想了很多办法,都不是特别好使,最后用的是在发送数据是加上一个值这个值有工作者线程来确定,每次发送时更新此数据,接收到数据后进行比对看是不是这次请求的数据。
技术强的大牛们如果有什么好建议可以提一提啊。
网络同步带来的bug的更多相关文章
- ue4网络同步概念笔记
网络同步主要的概念是 复制. 不是以前的S,C逻辑分离. 是S复制到C通过 Switch Has Authority 将S与C的逻辑在程序内分离. 所属权:每个连接到S的C都有自己的 控制权.从 ...
- Unite 2017 | 从《闹闹天宫》看MOBA游戏里的网络同步技术
http://mp.weixin.qq.com/s/0v0EU79Q6rFafrh8ptlmhw 在Unite 2017 Shanghai案例分享专场,来自蓝港互动<闹闹天宫>项目组的主程 ...
- MOBA游戏的网络同步技术
转自:http://www.gameres.com/750888.html 在5月13日Unite 2017 案例分享专场上,蓝港互动<闹闹天宫>项目组的主程序陈实分享了MOBA游戏的网络 ...
- 是uibutton跟tableviewcell同步使用一个bug
这个问题是uibutton跟tableviewcell同步使用一个bug,不关delay一点毛事,证据就是点击事件没问题,so,搜到一个方法解决了这个问题.uibutton分类symbian2+ios ...
- 百度云+ KeePass 网络同步你的密码
百度云+ KeePass 网络同步你的密码 百度云一个目前不限流量不限格式能直链的网盘,速度在我这里很快,难得了!KeePass(小众介绍过 KeePass.) 是一个免费开源的密码管理类软件, ...
- UE4 内容示例网络同步Learn
一, 1.1 Actor的复制 Actor中的Replicates ,为true时,服务器会把该Actor同步,显示在客户端中. 1.2 Switch Has Authority判断是客户端还是服务器 ...
- UE4网络同步属性笔记
GameMode只有服务端有,适合写游戏逻辑.PlayerController每个客户端拥有一个,并拥有主控权.GameState在服务端同步到全端. CLIENT生成的Actor对其有Authori ...
- Unity - Photon PUN 本地与网络同步的逻辑分离 (二)
上篇实现了事件系统的设计,这篇就来结合发送RPC消息 并且不用标记 [PunRPC] 先来看下上编的代码 GameEnvent.cs private static Dictionary<Comm ...
- CentOS7 时间设置与网络同步
1.查看时区 [root@localhost /]# date -R Thu, Jul :: + +0800表示东八区,这边就不用再设置 时区中的CST表示中国标准时间. 时区相关共享文件在/usr/ ...
随机推荐
- OA项目笔记-从建立接口 dao impl action jsp等框架实现crud
1,设计 BaseDao 与 BaseDaoImpl 1,设计接口 BaseDao 1,每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作.例 实体 Dao接口 实现类 ======== ...
- Linux系统的压缩技术
1.常见的压缩文件扩展名 *.Z ---> compress程序压缩的文件. *.gz --->gzip 程序压缩的文件: *.bz2------>bzip2程序压缩的文件: *.t ...
- 一键配置openvpn
页面:https://github.com/Nyr/openvpn-install openvpn-install OpenVPN road warrior installer for Debian, ...
- iOS8下bundle路径变更
iOS8下路径变为: /Users/username/Library/Developer/CoreSimulator/Devices/786824FF-6D4C-4D73-884A-696514481 ...
- Flasky学习笔记(一)
1. app.run(debug=True,host='10.0.2.15',port=8000)自定义host及port;
- cocos2d-x:懒人数学函数
做游戏开发,要用到比较多的数学计算,对于程序员来说,还是用一种懒一点的方法,cocos2d-x方便开发者投机取巧...提供了很多方便的的数学函数,方便我们的数学计算.以下是在网上收集到的一些常用的数学 ...
- FPGA综合工具--Synplify Pro的常用选项及命令
最近要用到Synplify,但以前没使用过,无基础,找到一篇帖子,隧保存下来. 本文转自:http://blog.sina.com.cn/s/blog_65fe490d0100v8ax.html Sy ...
- 前端开发根据url进行页面跳转控制以及实现菜单栏手风琴效果
html中的元素:<ul id="accordion" class="accordion"> <li class="licss&q ...
- ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序
连接数太多 关掉没用的 plsql
- 再谈vertical-align与line-height
每次遇到多个inline-block元素排列的怪异垂直位置的问题的时候都可以通过经验,设置vertical-align来解决,没深入研究过,现在需要分析总结下这个问题. 问题引出 有小鲜肉新做了个页面 ...