免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4329 | 回复: 9
打印 上一主题 下一主题

LINUX socket 是否有每秒呼叫次数的限制? [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-19 13:42 |只看该作者 |倒序浏览
做了一个服务器(32位suse 11),每秒3000个交易(服务)以下是正常的。超过这个值,
有时在客户端,有时在服务器,出现:
连接被锁死,然后出现:
error=11,Resource temporarily unavailable

活动日志未见任何其他错误。

请问,linux是否有某些限制?
另外考虑可能 STREAM资源有限,如何设置内核的STREAM数量?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-01-19 13:51 |只看该作者
应该是正常的错误,发送缓冲满

论坛徽章:
0
3 [报告]
发表于 2011-01-19 14:07 |只看该作者
长连接还是短连接?

论坛徽章:
0
4 [报告]
发表于 2011-01-19 14:16 |只看该作者
有限制的 之前做网络棋牌 一个服务端只能容纳3000-4000 个客户端连接 多了就得扩充服务端..

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2011-01-19 14:27 |只看该作者
有限制的 之前做网络棋牌 一个服务端只能容纳3000-4000 个客户端连接 多了就得扩充服务端..
wb112200 发表于 2011-01-19 14:16



    几万客户端连接很正常的呀,主要看带宽

论坛徽章:
0
6 [报告]
发表于 2011-01-19 14:32 |只看该作者
回复 5# hellioncu


    几万客户端连接 是一个服务器架构 有N台服务器通过路由搞定的

论坛徽章:
0
7 [报告]
发表于 2011-01-19 14:41 |只看该作者
几万个连接,一个服务器轻松搞定

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
8 [报告]
发表于 2011-01-20 13:39 |只看该作者
本帖最后由 yulihua49 于 2011-01-20 13:40 编辑
应该是正常的错误,发送缓冲满
hellioncu 发表于 2011-01-19 13:51



    是接收时发生的错误。 现在1000个客户,流量不大时也时有发生。
有时在客户端发生,有时在服务器发生。

接收器代码(多线程环境,线程间不共享socket):

  1. int RecvNet(int s,char *buf,int n,int timeout)
  2. {
  3. int bcount,br,ret,num=0;
  4. struct timeval tmout;
  5.         tmout.tv_sec=timeout;
  6.         tmout.tv_usec=0;
  7.         ret=setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&tmout,sizeof(tmout));

  8.         if(!buf) return 0;
  9.         *buf=0;
  10.         if(n<=0) return 0;
  11.         bcount=0;
  12.         br=0;

  13.         num=0;
  14.         while(bcount<n){
  15.                 if((br=read(s,buf,n-bcount))>0){
  16.                         bcount+=br;
  17.                         buf+=br;
  18.                         continue;
  19.                 }
  20.                 if(br<0){
  21. //在这里出错返回
  22.                     ShowLog(1,"%s:br=%d,err=%d,%s",__FUNCTION__,br,errno,strerror(errno));
  23.                     return -1;
  24.                 }
  25.                 if(!br ) {
  26.                         if( ++num>100) break;
  27.                         usleep(5000);
  28.                         continue;
  29.                 } else num=0;
  30.         }
  31.         if(bcount<=0) {
  32.                 ShowLog(1,"%s:bcount=%d,err=%d,%s",__FUNCTION__,bcount,errno,strerror(errno));
  33.                 return -1;
  34.         }
  35.         return bcount;
  36. }
复制代码

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
9 [报告]
发表于 2011-01-21 00:39 |只看该作者
ret=setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&tmout,sizeof(tmout));


SO_RCVTIMEO
Sets the timeout value that specifies the maximum amount of time an input function waits until it completes. It accepts a timeval structure with the number of seconds and microseconds specifying the limit on how long to wait for an input operation to complete. If a receive operation has blocked for this much time without receiving additional data, it shall return with a partial count or errno set to [EAGAIN] or [EWOULDBLOCK] if no data is received. The default for this option is zero, which indicates that a receive operation shall not time out. This option takes a timeval structure. Note that not all implementations allow this option to be set.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2011-02-15 16:45 |只看该作者
ret=setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&tmout,sizeof(tmout));


SO_RCVTIMEO
Sets the t ...
chenzhanyiczy 发表于 2011-01-21 00:39



   的确是超时了。
现在问题解决了,是我自己的错误。多线程并发时,一些状态混乱了。
现在已经实现了1000000/min的交易吞吐量。所以说系统对吞吐量没有限制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP