一个关于socket通讯的问题,呵呵

ilovechao1314 2007-06-28 05:23:02
我想问下如果在一个局域网中,50m带宽,服务器是一般的主机,大概p4 3.0 ,2g内存的,如果有100个客户端tcp访问,每次数据量大概在1-1.5k左右,服务器能不能承载?还有如果我只是调用framework2中的socket,而不是用完成端口这类的东西,可以吗?
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedGoldFish 2007-06-29
  • 打赏
  • 举报
回复
10分钟1次 太轻松了,我们还有一些服务器要应付在秒级的大量客户端访问,按我上边说的模式一样跑的很好.
ilovechao1314 2007-06-29
  • 打赏
  • 举报
回复
客户端访问频繁程度大概是每个客户端10分钟1次吧,如果根据1楼的说话那就是说每次大概要10k的数据量,但是我怕同一时间100个客户端同时访问,
wxlcc520 2007-06-28
  • 打赏
  • 举报
回复
关注
csharpstudy 2007-06-28
  • 打赏
  • 举报
回复
我和楼主一样有这样的需求....呵呵..

RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
说一些我自己做Socket服务器的体会:

1. sokcet异步通讯时候最好不要手工产生线程,而要用.NET自身提供的异步通讯方式:
BeginXXX/EndXXX.它的好处是可最大限度地利用通讯硬件自己的线程和资源,而不是CPU上的线程.

比如用TcpClient类作异步读时,可以用TcpClient.GetStream().BeginRead, 并在它的CallBack函数中再次调用BeginRead,从而形成一个循环.

2. 线程对Server程序来说是非常昂贵的资源,尽量从设计的时候就少开线程,如果一个程序同时有二三百个线程,它即使不死性能也会很差.

楼主这个系统,如果服务器解析每个用户线程发来的消息时需要使用一些线程之间的共享资源和数据,为减少线程同步的开销和复杂性,可以考虑接到用户消息后马上抛到一个临时队列里,整个程序只用一个线程从队列中取出消息并解析.假如处理了客户端的信息后还需要向客户端返回信息,可以采用异步方式发送,这样一来服务器性能会好一些.


3.如果需要向控制端发送许多一模一样的信息而且控制端都在同一个网段里,可以考虑用UDP的MultiCast来减少点儿负担,前提是所在的网允许MultiCast.
RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
服务器做的好应该没问题. 我用Socket 异步操作时候一个服务器接收几百个连接, 每个客户访问的频繁程度是在分钟级. 不知道LZ的客户端访问频繁程度如何.
netusemaster 2007-06-28
  • 打赏
  • 举报
回复
1.用多线程
2.CPU占用调试,socket一次传输数据大概8K左右

110,533

社区成员

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

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

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