说一下之前遇到的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的更多相关文章

  1. ue4网络同步概念笔记

    网络同步主要的概念是 复制.  不是以前的S,C逻辑分离.  是S复制到C通过 Switch Has Authority  将S与C的逻辑在程序内分离. 所属权:每个连接到S的C都有自己的 控制权.从 ...

  2. Unite 2017 | 从《闹闹天宫》看MOBA游戏里的网络同步技术

    http://mp.weixin.qq.com/s/0v0EU79Q6rFafrh8ptlmhw 在Unite 2017 Shanghai案例分享专场,来自蓝港互动<闹闹天宫>项目组的主程 ...

  3. MOBA游戏的网络同步技术

    转自:http://www.gameres.com/750888.html 在5月13日Unite 2017 案例分享专场上,蓝港互动<闹闹天宫>项目组的主程序陈实分享了MOBA游戏的网络 ...

  4. 是uibutton跟tableviewcell同步使用一个bug

    这个问题是uibutton跟tableviewcell同步使用一个bug,不关delay一点毛事,证据就是点击事件没问题,so,搜到一个方法解决了这个问题.uibutton分类symbian2+ios ...

  5. 百度云+ KeePass 网络同步你的密码

     百度云+ KeePass 网络同步你的密码   百度云一个目前不限流量不限格式能直链的网盘,速度在我这里很快,难得了!KeePass(小众介绍过 KeePass.) 是一个免费开源的密码管理类软件, ...

  6. UE4 内容示例网络同步Learn

    一, 1.1 Actor的复制 Actor中的Replicates ,为true时,服务器会把该Actor同步,显示在客户端中. 1.2 Switch Has Authority判断是客户端还是服务器 ...

  7. UE4网络同步属性笔记

    GameMode只有服务端有,适合写游戏逻辑.PlayerController每个客户端拥有一个,并拥有主控权.GameState在服务端同步到全端. CLIENT生成的Actor对其有Authori ...

  8. Unity - Photon PUN 本地与网络同步的逻辑分离 (二)

    上篇实现了事件系统的设计,这篇就来结合发送RPC消息 并且不用标记 [PunRPC] 先来看下上编的代码 GameEnvent.cs private static Dictionary<Comm ...

  9. CentOS7 时间设置与网络同步

    1.查看时区 [root@localhost /]# date -R Thu, Jul :: + +0800表示东八区,这边就不用再设置 时区中的CST表示中国标准时间. 时区相关共享文件在/usr/ ...

随机推荐

  1. OA项目笔记-从建立接口 dao impl action jsp等框架实现crud

    1,设计 BaseDao 与 BaseDaoImpl 1,设计接口 BaseDao 1,每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作.例 实体 Dao接口 实现类 ======== ...

  2. Linux系统的压缩技术

    1.常见的压缩文件扩展名 *.Z ---> compress程序压缩的文件. *.gz --->gzip 程序压缩的文件: *.bz2------>bzip2程序压缩的文件: *.t ...

  3. 一键配置openvpn

    页面:https://github.com/Nyr/openvpn-install openvpn-install OpenVPN road warrior installer for Debian, ...

  4. iOS8下bundle路径变更

    iOS8下路径变为: /Users/username/Library/Developer/CoreSimulator/Devices/786824FF-6D4C-4D73-884A-696514481 ...

  5. Flasky学习笔记(一)

    1. app.run(debug=True,host='10.0.2.15',port=8000)自定义host及port;

  6. cocos2d-x:懒人数学函数

    做游戏开发,要用到比较多的数学计算,对于程序员来说,还是用一种懒一点的方法,cocos2d-x方便开发者投机取巧...提供了很多方便的的数学函数,方便我们的数学计算.以下是在网上收集到的一些常用的数学 ...

  7. FPGA综合工具--Synplify Pro的常用选项及命令

    最近要用到Synplify,但以前没使用过,无基础,找到一篇帖子,隧保存下来. 本文转自:http://blog.sina.com.cn/s/blog_65fe490d0100v8ax.html Sy ...

  8. 前端开发根据url进行页面跳转控制以及实现菜单栏手风琴效果

    html中的元素:<ul id="accordion" class="accordion">  <li class="licss&q ...

  9. ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序

    连接数太多 关掉没用的 plsql

  10. 再谈vertical-align与line-height

    每次遇到多个inline-block元素排列的怪异垂直位置的问题的时候都可以通过经验,设置vertical-align来解决,没深入研究过,现在需要分析总结下这个问题. 问题引出 有小鲜肉新做了个页面 ...