﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-2010年底后再来看2010年都干了啥-最新评论</title><link>http://www.cppblog.com/ziyebuboka/CommentsRSS.aspx</link><description>2012年前得干点啥，2012快来了</description><language>zh-cn</language><pubDate>Mon, 26 Apr 2010 01:38:00 GMT</pubDate><lastBuildDate>Mon, 26 Apr 2010 01:38:00 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113562</link><dc:creator>ziyebuboka</dc:creator><author>ziyebuboka</author><pubDate>Mon, 26 Apr 2010 01:38:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113562</guid><description><![CDATA[@true<br>你说的这种模式也是使用较广的，而且比较适合使用在账号代理角色代理上，比如玩家的定时保存信息，完全是无序不需要保证先后顺序的，则可以在逻辑层直接转空闲线程处理，而玩家退出登录这类要保证先后顺序的操作就必须要由一个线程单独处理。在逻辑模块的开发上我个人还没成功使用过，有序和无序的分开解决，是解决了安全问题，但是无形中进一步加大了开发上手度和难度，而且各逻辑模块间也再也不能直接交互了，只能以消息棒的形式交互了。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">ziyebuboka</a> 2010-04-26 09:38 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113562#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程[未登录]</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113556</link><dc:creator>true</dc:creator><author>true</author><pubDate>Mon, 26 Apr 2010 00:51:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113556</guid><description><![CDATA[逻辑层，按功能划分模块，每个模块由一个待处理队列，模块进一步分为有序模块和无序模块，有序模块由一个线程单独处理，无序模块多线程处理。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">true</a> 2010-04-26 08:51 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/26/113481.html#113556#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113548</link><dc:creator>ziyebuboka</dc:creator><author>ziyebuboka</author><pubDate>Sun, 25 Apr 2010 15:37:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113548</guid><description><![CDATA[@expter<br>你说的这个就是文里面一开始提到的主流线程的架构模式了。网络层一个，逻辑层一个。安全性等等肯定都是可以做到非常好的，但是效率上肯定就差了，其实各个场景本来就是独立，完全可以单独开线程，这个文讨论的就是如何用安全高效的方式来解决多线程<br>10:27 不知道 在回复中所提到的也是一种主流方式，在消息的逻辑处理模块为各个场景单独开线程，但是网络层收发消息的处理上仍然还是一个，所以我这里提出的就是可以依据游戏服务器的特殊性，以场景为单位来管理本场景内的LINK，在网络收发处为每个场景开线程来收发。<br>也有一种情况可以是直接在网络层为link分组各个线程管理，比如预生成的1000个Link，0--499号Link是A线程管理，500--999是B线程管理，但是这样会在消息同步等方面出现问题，比如A玩家和B玩家打架 A砍了B一刀，B砍了A一刀，这时候在先后顺序上就有可能出现问题了，A的Link在A线程，B的Link在B线程，有可能是A的操作是先做，但是B线程先Tick了，导致B的砍一刀比A的砍一刀先处理了。。所以我这里提出是以场景为单位来管理Link 则这种问题就会避免了。。<br>我这里提出的模式就是网络层以场景为单位线程管理本场景内LINK,而后是各个场景再来各个的逻辑处理线程处理各个场景的消息队列<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">ziyebuboka</a> 2010-04-25 23:37 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113548#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113546</link><dc:creator>expter</dc:creator><author>expter</author><pubDate>Sun, 25 Apr 2010 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113546</guid><description><![CDATA[我觉得可以分为网络层和逻辑层<br>网络底层接收发消息，<br>逻辑层处理消息。<br><br>逻辑只有1个主线程，不停的响应所有消息和定时器触发.<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">expter</a> 2010-04-25 23:16 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113546#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113537</link><dc:creator>ziyebuboka</dc:creator><author>ziyebuboka</author><pubDate>Sun, 25 Apr 2010 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113537</guid><description><![CDATA[我觉得开发中还是需要在必要的地方结合特项目的特殊情况做特殊考虑与处理，<br>这也就是一种构思了，还需要一些具体实施<br>从设计模式角度来说，肯定是不够好的了，要不怎么叫异变呢。。。<br>不过从性能上来说，个人认为还是提高的。。。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">ziyebuboka</a> 2010-04-25 21:55 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113537#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113536</link><dc:creator>ziyebuboka</dc:creator><author>ziyebuboka</author><pubDate>Sun, 25 Apr 2010 13:54:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113536</guid><description><![CDATA[@keror<br>通用完全独立模块和效率必然要选择其一了。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">ziyebuboka</a> 2010-04-25 21:54 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113536#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113522</link><dc:creator>keror</dc:creator><author>keror</author><pubDate>Sun, 25 Apr 2010 09:57:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113522</guid><description><![CDATA[@ziyebuboka<br>网络层要换成iocp，怎么办？<br>你说的优点都不是优点。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">keror</a> 2010-04-25 17:57 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113522#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113498</link><dc:creator>ziyebuboka</dc:creator><author>ziyebuboka</author><pubDate>Sun, 25 Apr 2010 03:57:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113498</guid><description><![CDATA[@不知道<br>缺点的确有，从架构上来说，层次互饶的确不好，但是具备了一定的好处，而且可以从设计模式的角度做好层次互分，我是这么认为的 <br>1：首先 如果还是在网络层一个线程对所有SOCKET做处理 再转发至各个场景消息队列 由各个场景的消息处理线程对其做处理，也的确可实现消息处理的多线程，但是不可避免的，在SOCKET对LINK的管理上任然会出现性能瓶颈，因为在进出口上只有一条路（如果进出口这里直接用多线程，则会出现无法知道与控制与为什么是这个线程管理这个Link 而另一个线程管理另几个Link） <br>2：如果将LINK的管理层次上到场景级别，缺点是一定层度上与架构第二层次互饶，但是优点是对各个LINK的管理也不再是一条路了，由各个场景LINK管理线程对各个场景内的LINK做管理，也是多条路了，而后再发至各个场景消息队列，又各个场景消息处理线程对消息做逻辑层次处理，可解决瓶颈 <br>3：从模式角度来解决耦合度的问题，制造SceneLinkManager 挂接各个场景，制造各个SceneLinkManager线程，服务器启动根据场景来生成，而SceneLogic与PlayerLogic仍在上一层次，消息进入队列从Link找到Player,并且再制造每个场景的消息逻辑处理线程，消息队列的逻辑处理只在这里面进行，因而我们仍然认为此Manager还是属于网络层次，对于上层逻辑无需关注SceneLinkManager的操作。          <img src ="http://www.cppblog.com/ziyebuboka/aggbug/113498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">ziyebuboka</a> 2010-04-25 11:57 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113498#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 游戏服务器的网络层架构异变实现服务器多线程</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113492</link><dc:creator>不知道</dc:creator><author>不知道</author><pubDate>Sun, 25 Apr 2010 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113492</guid><description><![CDATA[没有必要把底层socket操作提到这么高层次来，缺点很明显。<br>其实只要有个模块控制玩家在哪个场景就行了，底层socket收到的消息交给他，有他来分发给正确的场景线程处理。<img src ="http://www.cppblog.com/ziyebuboka/aggbug/113492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">不知道</a> 2010-04-25 10:27 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/04/25/113481.html#113492#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 浅谈游戏服务器-》架构上来看（三） [未登录]</title><link>http://www.cppblog.com/ziyebuboka/archive/2010/02/02/104732.html#107002</link><dc:creator>cppexplore</dc:creator><author>cppexplore</author><pubDate>Tue, 02 Feb 2010 06:11:00 GMT</pubDate><guid>http://www.cppblog.com/ziyebuboka/archive/2010/02/02/104732.html#107002</guid><description><![CDATA[刚顶错地方了 呵呵. 好文! 期待博主继续<img src ="http://www.cppblog.com/ziyebuboka/aggbug/107002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ziyebuboka/" target="_blank">cppexplore</a> 2010-02-02 14:11 <a href="http://www.cppblog.com/ziyebuboka/archive/2010/02/02/104732.html#107002#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>