Unity 服务器基础知识总结,杂谈(C#版)

这是学习《Unity3D网络游戏实战》第二版的总结。

   C#网络库里异步使用begin和end,不论是connect、accept,还是send、receive本身都是同步方法,意味着只要没有获取到程序就会卡在那永不动弹。
  异步是新开出一条线程,在新线程中阻塞等待,因此主线程不受影响。
  使用异步需要细致的考虑逻辑上的顺序关系,不容易
  可以使用同步达到异步避免卡住的效果,使用Poll可以检测当前socket是否连接失败,是否能够(需要)接受数据(读)或者发送数据(写)。
  说白了最简单的同步是会卡住的,游戏体验会很不好,解决方案可以用异步,但是要考虑何时send,receive,逻辑顺序会很重要,不太好写。还可以使用poll同步的方式解决,其实poll就是个方法,可以判断一下当前需不需要send、receive,不需要就不做,免得卡住,但是这样程序每次都要遍历所有的socket来判断。这样会很占用CPU,
  这里要说个重点:书上虽然最后介绍的select poll,但select poll 和 poll其实消耗是一样大的,并不是最优解,很容易让人会错意。 select poll 只不过就是把 poll select出来,可以获取到一堆需要send或者receive的socket。内部实现照样是全部遍历一遍socket,linux中的epoll才是消耗小。epoll使用事件触发的方法,相当于让那些该做操作的socket主动报备,不需要全部遍历挨个询问。
  

你可能感兴趣的:(Unity)