Socket的缓存区设置的疑惑

SoulRed 2016-12-23 03:18:18
我有写一个卡牌网络游戏的小服务器。
我给SocketAsyncEventArgs中的Buffer设置的缓冲区是个1K的数组。
因为程序首先要有一个SOCKET来监听端口才能收发数据,
看到一个SOCKET缓冲区大小的属性Socket.SendBufferSize,这个属性默认是8K。
请问设置个属性对SocketAsyncEventArgs的Buffer有什么影响么?

那个 socket的Socket.SendBufferSize设置后影响范围是整个应用程,还是每个SocketAsyncEventArgs?
另外我还有疑惑就是这个socket大小在1000个连接不停发送接收数据,每个包大小512字节的时候,设置多少才合适?

...全文
277 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
IE下又卡白屏了,SendBuffer和ReadBuffer又稍不一样 socket并不是你一调用Send就会立即把数据发出去,会先根据策略决定是否先暂存到SendBuffer,等累积到一定数据量才会发出去,当你send的数据量太小时,这样明显能提高效率 自己看吧 http://blog.chinaunix.net/uid-20726500-id-4949695.html
  • 打赏
  • 举报
回复
一般如果是静态成员就是全局的, 比如 String.Empty WebRequest.GetSystemWebProxy() SocketAsyncEventArgs中的Buffer和Socket.SendBufferSize是两个完全不同的东西 前者是Net框架中应用程序读写数据时缓冲区,因为socket是数据流,所以一般都是根据应用层协议读取所需的数据(也就是常说的解包) 后者是操作系统底层分配的暂存应用程序来不及处理的数据,一般不需要改动。在windows上,所有基于winsock编程的(C也不例外)都会有这个 最后个问题,1000个连接,512K数据应该是你随意杜撰的场景吧,实际应用不太会遇到 只能说缓冲区越大,性能略好;太小,会增加缓冲区读写copy的次数,性能下降。但是肯定不是线性关系的,跟网络环境,数据吞吐有关,系统设置的那个缓冲区是平衡各种因素预设的 另外SocketAsyncEventArgs是可以重用的,实际使用中应用层的包也不会太小(影响收发效率),所以..
knf 2016-12-23
  • 打赏
  • 举报
回复
设置多大并没有影响。 一般1K左右就够了。 如果每个包512字节,在网络通畅的情况下,1K缓冲区可以一次接收完一个包。 但是在网络不畅的情况下,可能几个包一起来,就需要处理粘包。事实上,任何情况下都应该写粘包的处理。

110,555

社区成员

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

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

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