在写TCP应用的时候一般都通过Accept来接入连接的接入,但对于Socket来说这个Accept同时能处理多大的量一般都没有明确说明,在应用中主要根据自己的需要设置Listen的队列数量.那Listen(1000)是不是就能说明同时刻1000个连接进来都能被Accept到呢?通过测试的结果来看windows下是不能的....Linux下则可以.

测试代码

  • C#

               Socket mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    mSocket.Bind(new IPEndPoint(IPAddress.Any,80));
    mSocket.Listen(1000);
    int i = 0;
    while (true)
    {
    Socket http= mSocket.Accept();
    System.Threading.Thread.Sleep(200);
    i++;
    Console.WriteLine("Accept:{0} ", i); }
  • win C++
    	iResult = listen(ListenSocket, 1000);
    if (iResult == SOCKET_ERROR) {
    printf("listen failed with error: %d\n", WSAGetLastError());
    closesocket(ListenSocket);
    WSACleanup();
    return 1;
    }
    int i=0;
    while(true)
    {
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    i++;
    if (ClientSocket == INVALID_SOCKET) {
    printf("accept failed with error: %d\n", WSAGetLastError());
    closesocket(ListenSocket);
    WSACleanup();
    return 1;
    }
    iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    printf("accept: %d\n", i);
    }
  • linux c++
    	if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
    {
    perror("bind");
    return 1;
    }
    listen(server_sockfd,1000);
    sin_size=sizeof(struct sockaddr_in);
    int i=0;
    while(1)
    {
    i++;
    if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0)
    {
    cout<<"accept error";
    return 1;
    }
    len=recv(client_sockfd,buf,BUFSIZ,0);
    cout << "Accept:" << i<<"Receive:"<<len; }

通过AB开启500个用户压相应的程序,C#,WIN C++都会导致AB出现apr_socket_recv: Connection refused (111).但Linux c++这代码是完全正常,AB所有请求的连接都通过被Linux c++接入.

以上程序上所有Listen都是1000, 按理500个用户同时接入不应该存在被拒绝的情况,因为请求的连接数并没达队列溢出的情况.但测试的结果很明确地说明的问题所在,winsocket下无法同时接入这个量的连接,其实在测试过程250个用户同时接入winsocket就存在拒绝接入的情况,当然服务是不会有影响只是有些连接无法被接入.

总结

通过测试可以确认是winsocket的限制,windows则没有因为IIS是可以抵抗这么多用户同时接入的.其实对于普通服务来说同时200个用户接入已经是一个不小的量了,因为持续这个量的处理每秒接入量可以达到1-2W.但感觉奇怪的是为什么Listen(1000)在winsocket下没有起到作用呢?找了很多资料都没找到具体原因,如果有熟悉winsocket还有其他参数设置的话希望能分享一下...

WinSocket同时接入量的疑惑(求解...)的更多相关文章

  1. TCP应用

    .Net 并行计算 ----并行任务 本文作为 .Net 并行计算 的第二篇 名词解释 任务并行是指一个或者多个独立的任务同时运行.任务并行类似于多线程或者ThreadPool 工作项.但是抽象的级别 ...

  2. 在线最优化求解(Online Optimization)之五:FTRL

    在线最优化求解(Online Optimization)之五:FTRL 在上一篇博文中中我们从原理上定性比较了L1-FOBOS和L1-RDA在稀疏性上的表现.有实验证明,L1-FOBOS这一类基于梯度 ...

  3. 论文阅读之Joint cell segmentation and tracking using cell proposals

    论文提出了一种联合细胞分割和跟踪方法,利用细胞segmentation proposals创建有向无环图,然后在该图中迭代地找到最短路径,为单个细胞提供分割,跟踪和事件. 3. PROPOSAL GE ...

  4. 一文带您了解5G的价值与应用

    一文带您了解5G的价值与应用 5G最有趣的一点是:大多数产品都是先有明确应用场景而后千呼万唤始出来.而5G则不同,即将到来的5G不仅再一次印证了科学技术是第一生产力还给不少用户带来了迷茫——我们为什么 ...

  5. 干工第一天,这个api超时优化把我干趴下了!

    近日我司进行云服务商更换,恰逢由我负责新上线的三方调用 api 维护管理,在将服务由阿里云部署到腾讯云过程中,我们压测发现在腾讯云调用京东接口时 TP999 抖动十分剧烈,尽管业务层有重试操作但是超时 ...

  6. 交易系统使用storm,在消息高可靠情况下,如何避免消息重复

    概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理.这个时候仅仅开启storm的ack机制并不能解决上述问题.那么该如何设计出一个好的方案 ...

  7. 5G关键技术评述

    业内重大事件: 张  平:无线通信领域专家,北京邮电大学教授,博士生导师,现任北京邮电大学无线新技术研究所(WTI)所长.泛网无线通信教育部重点实验室主任以及中德软件研究所副所长.张平教授是国家宽带无 ...

  8. 【Bugly干货分享】老司机教你 “飙” EventBus 3

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. EventBus对于Android ...

  9. 电影成生活O2O必争之地,破局之战就此拉开

    这一次的两会过后,互联网最流行的一个词恐怕当属“互联网+”.尤其是总理关于“以互联网为载体.把线上线下互动的新兴消费搞得红红火火”的一席话,更是让国内的O2O从业者兴奋不已.百度李彦宏在两会接受记者采 ...

随机推荐

  1. c++ a+b

    #include<iostream> using namespace std; int main() { int a,b,sum; cin>>a>>b; sum=a ...

  2. vue项目开发时怎么解决跨域

    vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is prese ...

  3. nodejs操作mysql常见错误

    1.Cannot enqueue Handshake after already enqueuing a Hand shake.这个错误提示意思是某个数据库连接已经执行了,不能进行多次连接了.遇到此类 ...

  4. boa调试

    Cannot access memory at address 0x0 0x400fc7e0 in ?? () 0 0x4014f0dc in wcscasecmp_l () from /lib/li ...

  5. 简单工厂模式demo

    1. 简单工厂模式 domain的接口 public interface Color{ public void display(); } red public Class Red implements ...

  6. 使用cAdvisor+Influxdb+Grafana监控系统

      今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...

  7. emWin监护仪界面设计,含uCOS-III和FreeRTOS两个版本

    第5期:监护仪界面设计 配套例子:V6-908_STemWin提高篇实验_监护仪界面设计(uCOS-III)V6-909_STemWin提高篇实验_监护仪界面设计(FreeRTOS) 例程下载地址:h ...

  8. Android 实现卡片翻转的动画(翻牌动画)

    Android 实现卡片翻转的动画(翻牌动画) 需求描述 点击卡片,卡片翻转过来显示内容. 点击左边的卡片,将卡片翻转显示右边的图片结果. 功能实现 因为要翻转所以使用动画来完成翻转的动画.动画分为两 ...

  9. [Swift]LeetCode672. 灯泡开关 Ⅱ | Bulb Switcher II

    There is a room with n lights which are turned on initially and 4 buttons on the wall. After perform ...

  10. 优化之XML组件

    可在XML Parser 组件和XML Source定义中删除非project group,因为不需为这些非project group分配内存,但需要维护主键外键约束 ________________ ...