游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 思月行云

C#异步Socket VS IOCP

[复制链接]

0

主题

9

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2011-3-24 01:22:00 | 显示全部楼层

Re:C#异步Socket VS IOCP

我也一直被这个问题困扰着,尝试过用3.5的方式去提升效率,但是放在实际游戏中去跑,经常崩溃。自己单机测试偶尔崩溃,提示一些奇怪的异常信息,有时候连vs都直接死掉。后来一直用2.0的模式去跑,虽然cpu消耗超高,但是不崩溃,我也一直想请高人能指点下,希望能有个妥善的解决方式。

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
 楼主| 发表于 2011-3-28 11:20:00 | 显示全部楼层

Re: Re:C#异步Socket VS IOCP

ozeo1121: Re:C#异步Socket VS IOCP

你加我QQ吧,3223266

非常不好意思!
上周已经看到了您留的联系方式,可是因为公司平时禁止使用QQ及MSN一类的聊天工具,而前一段时间自家的网又离奇被断掉了,所以一直未能及时回复您。非常抱歉~

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
 楼主| 发表于 2011-3-28 11:31:00 | 显示全部楼层

Re: Re:C#异步Socket VS IOCP

2734214: Re:C#异步Socket VS IOCP
我也一直被这个问题困扰着,尝试过用3.5的方式去提升效率,但是放在实际游戏中去跑,经常崩溃。自己单机测试...

我这边的情形基本和您的相近,但并未出现崩溃的现象。
不过倒是有过服务端因群发时异步发送太过频繁,导致系统临时缓冲区被占满,从而连接被强行断掉的现象。
具体的机制您可以参考下这篇:http://www.cnsw.org/bbs/thread-68634-1-1.html,希望会对您有所帮助。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-5-6 11:56:00 | 显示全部楼层

Re:C#异步Socket VS IOCP

这个话题很感兴趣,我描述一下我的观点吧。

按楼主的例子,有几个地方是资源消耗比较大的地方:
1.测试用的客户端以200ms的频率登录,如果每个客户端每次发送数据都是重复登录的话,那么,1000个客户端对服务器的登录并发就是5000/s  ,这里存在压力(建立新的socket,释放socket),不知道楼主是否用了socket池来管理和重用socket资源? 如果不是重复登录,那么,服务器在客户端登录方面不会有持续的压力(1000个客户端的话,前200秒登录并发为5/s)。
2.1000个客户端在发送数据时,服务端接收缓冲,是否采用缓冲池方式管理(重用接收缓冲),如果没有的话,每秒要建立1000个缓冲区,并释放1000个缓冲区,也是服务器消耗。
3.服务端在发送数据时,是否采用了缓冲池方式管理(重用发送缓冲),如果没有的话,服务端每秒要建立30000个缓冲区,并释放30000个缓冲区,也是服务器消耗。

我以前用C#写过一个flash广告监控的服务端,flash广告投放的用户访问量并发在线在200000以上,每个客户端平均在线10秒,与服务端交互两次,发送IP及其它信息,大概在100字节左右。服务器中除上述部分用了各种池以外,还加入了服务器处理逻辑,服务器CPU占用只在15%以内。所以,我感觉C#的性能还是有很大潜力的。

另外,发送缓冲和接收缓冲池,其实可以共用。缓冲池管理逻辑是另外写的,可自动增加,动态控制内存消耗。

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2011-5-7 18:50:00 | 显示全部楼层

Re: Re: Re:C#异步Socket VS IOCP

这个现象很有趣,服务器群发送是1对多个,接受是多对一个。
服务器处理不过来多个客户端的数据,客户端发生发送失败的情况应该大于服务器。
而不应该反过来,你没有找到问题的瓶颈,不应该简单归罪于socket和iocp.
apche服务器是socket的,活的好好的。
思月行云: Re: Re:C#异步Socket VS IOCP


我这边的情形基本和您的相近,但并未出现崩溃的现象。
不过倒是有过服务端因群发时异步发送太过频繁,导...

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2011-5-7 18:51:00 | 显示全部楼层

Re: Re:C#异步Socket VS IOCP

这个已经不是提升效率的问题?写的东西经常崩溃?先找到崩溃的原因和设计的缺陷吧。
2734214: Re:C#异步Socket VS IOCP

我也一直被这个问题困扰着,尝试过用3.5的方式去提升效率,但是放在实际游戏中去跑,经常崩溃。自己单机测试...

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
 楼主| 发表于 2011-5-12 16:37:00 | 显示全部楼层

Re: Re:C#异步Socket VS IOCP

tophy: Re:C#异步Socket VS IOCP
这个话题很感兴趣,我描述一下我的观点吧。
按楼主的例子,有几个地方是资源消耗比较大的地方:
1.测试...

多谢tophy的提示,您提到的资源池机制我已经采用,并不存在大批量内存动态申请和释放的问题。
希望可以向您请教一下“发送缓冲和接收缓冲池复用”的方法。
假定服务端承载1000个客户端,1:30广播,则极端情况下作最坏的打算,服务端可能同一时刻广播30000次数据,这样一来,资源池内部是不是需要事先生成30000个资源单位呢?
谢谢~

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
 楼主| 发表于 2011-5-12 16:38:00 | 显示全部楼层

Re: Re:C#异步Socket VS IOCP

tophy: Re:C#异步Socket VS IOCP
这个话题很感兴趣,我描述一下我的观点吧。
按楼主的例子,有几个地方是资源消耗比较大的地方:
1.测试...

多谢tophy的提示,您提到的资源池机制我已经采用,并不存在大批量内存动态申请和释放的问题。
希望可以向您请教一下“发送缓冲和接收缓冲池复用”的方法。
假定服务端承载1000个客户端,1:30广播,则极端情况下作最坏的打算,服务端可能同一时刻广播30000次数据,这样一来,资源池内部是不是需要事先生成30000个资源单位呢?
谢谢~

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
 楼主| 发表于 2011-5-12 16:59:00 | 显示全部楼层

Re: Re: Re: Re:C#异步Socket VS IOCP

gantleman: Re: Re: Re:C#异步Socket VS IOCP
这个现象很有趣,服务器群发送是1对多个,接受是多对一个。
服务器处理不过来多个客户端的数据,客户端发生...

是gantleman兄~ 好久不见,不知最近可好?
最初入职的时候是老兄的一篇帖子引领我入门的,再次对老兄表示感谢。
老实说,我非常希望是自己没有找到问题的根源,而并非是C#异步Socket存在天生缺陷。
但事实就是让人如此无奈:C#异步Socket和IOCP的服务器都是我自己写的,思路自然不会出现两条。
本应出现大量细节问题以及内存管理问题的IOCP服务端跑的非常稳定,反倒是号称“内存托管”的C#异步Socket在附加与IOCP服务器一模一样的资源池机制之后依然无法突破其性能上限。
使用同样的思路,如果C#的异步Socket动不动就出现难以发觉的“技术瓶颈”,其便捷性何在呢?

我反复测试过,保持同样的客户端连接数,降低C#服务端调用BeginSend的次数,其实也就是降低广播比率,其性能马上会有一个明显的改善,不晓得这样可不可以将性能瓶颈定位在BeginSend方法上。
这个方法除了辅助以发送队列,还有什么必须注意的调用规则吗?希望gantleman兄可以指点一二。

祝,工作顺利~

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2011-5-13 10:11:00 | 显示全部楼层

Re: Re: Re: Re: Re:C#异步Socket VS IOCP

谢谢!
直觉来说应该把这件事情搞的简单一点,
首先不要考虑接收的问题,既然瓶颈在发送。
第一如果是只有一个客户端的情况下,发30万个包会不会有问题?
第二如果有有限数量的客户,服务端一个线程的情况下会不会有问题?
剩下的问题就是排除是不是线程使用不当导致互斥锁排队?
还是socket底层在处理发送时某种情况下会出现严重延迟?
我也很关心这个问题,很少有服务端发送延迟的报告,
如果有结果也上来说说原因。

思月行云: Re: Re: Re: Re:C#异步Socket VS IOCP


是gantleman兄~ 好久不见,不知最近可好?
最初入职的时候是老兄的一篇帖子引领我入门的,再次对老兄表示...

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 01:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表