c#服务器消息处理不过来怎么回事?

妥妥的橘子 2014-04-19 11:27:54
服务器好像显得太忙了。我是新手哈。
测试:一个玩家被15个怪物同时攻击。(我是故意的,哈哈)
这个时候,服务器收到很多的“攻击请求“包,收到的包是先放在一个队列里面的,然后取出来处理的。
包的队列的定义:private static System.Collections.Queue Packets = new System.Collections.Queue();
问题是:这个时候,如果玩家移动,就会等很久才收到服务器的反馈,这个怎么处理呢?
我的服务器运行的时候,数据包的处理没有用线程池,之前用过,后来改了,就是用一个线程。昨天听别人说,他们是”一个场景,一个线程“
请问下大家,如何解决这个问题呢??服务器似乎处理消息处理不过来了???
跪求大神解答啊。。。。。。。。。。。
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hudsonhuang 2014-04-19
  • 打赏
  • 举报
回复
怪物攻击的时候,肯定是伴随着攻击影响的计算,还有数据的存储(I/O)之类的 如果没有做异步操作的话,这些都会阻塞住线程
hudsonhuang 2014-04-19
  • 打赏
  • 举报
回复
不明白为什么不用线程池,而要改为一个线程,怎么可能响应得过来。。。
showjim 2014-04-19
  • 打赏
  • 举报
回复
这种需求如果CPU100%才叫服务器处理不过来。 如果你的CPU核心不止一个或者你的线程处理有阻塞,肯定不能只用一个线程处理。 但是多线程也不能滥用,根据具体需求设计。 如果你的包与包之间是独立的,最好在接收到的时候就直接处理掉并反馈给客户端。 多个包之间存在先后顺序的,加个锁就行了,不过要注意锁的粒度。
showjim 2014-04-19
  • 打赏
  • 举报
回复
引用 4 楼 u014796331 的回复:
请问下什么叫“线程的处理有阻塞”啊??我理解的不是很到位我觉得。谢谢!
阻塞就是你的CPU有段时间不工作了,处于等待中,比如等待硬盘操作、网络操作、锁操作等等...
妥妥的橘子 2014-04-19
  • 打赏
  • 举报
回复
引用 1 楼 sbwwkmyd 的回复:
这种需求如果CPU100%才叫服务器处理不过来。 如果你的CPU核心不止一个或者你的线程处理有阻塞,肯定不能只用一个线程处理。 但是多线程也不能滥用,根据具体需求设计。 如果你的包与包之间是独立的,最好在接收到的时候就直接处理掉并反馈给客户端。 多个包之间存在先后顺序的,加个锁就行了,不过要注意锁的粒度。
请问下什么叫“线程的处理有阻塞”啊??我理解的不是很到位我觉得。谢谢!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧