博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UDP迭代服务器示例和UDP流量控制的缺失
阅读量:4141 次
发布时间:2019-05-25

本文共 1408 字,大约阅读时间需要 4 分钟。

        我们知道, 有tcp服务器, 也有udp服务器, 这是按照协议来区分的。 如果按照服务方式来分, 还可以分为迭代服务器和并发服务器。

        所谓迭代服务器, 就是单个进程/线程在单个端口上顺序处理所有客户端的请求, 而并发服务器就不一样了, 可以通过fork进程来并发处理多个客户端的请求。

        在本文中, 我们主要来说说UDP迭代服务器和UDP流量控制的缺失。

        我们来看一个最简单的UDP服务器(迭代服务器):

#include 
#include
#include
#include
#include
#include
#include
int main(){ struct sockaddr_in srvAddr; bzero(&srvAddr,sizeof(srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_addr.s_addr = htonl(INADDR_ANY); srvAddr.sin_port = htons(8765); int srvAddrLen = sizeof(srvAddr); int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp bind(iSock, (struct sockaddr *)&srvAddr, sizeof(srvAddr)); while(1) { char szBuf[65536] = {0}; recvfrom(iSock, szBuf, sizeof(szBuf) - 1, 0, (struct sockaddr *)&srvAddr, (socklen_t*)&srvAddrLen); printf("msg from client [%s]\n", szBuf); } close(iSock); return 0;}
       如果一个客户端发数据过来, 显然, 在while(1)中, printf会打印对应的信息。 如果第二个客户端过来, 显然, 程序第二次进入while, 第二次打印对应的信息。假设, 有n个客户端连接过来, 那么就循环n次打印信息。 一切看似完美。

       假设有1000个客户端几乎同时发请求过来(高并发访问), 那么就会有这样一种可能: 1000个客户端请求到达后, udp服务器可能还没有处理完第一个请求, 那剩余的请求怎么办呢? 肯定不能直接丢弃啊。

       是的, 操作系统协议栈会为这个udp socket所在的端口分配一个队列, 并发而来的客户端请求会被放到队列中, 并遵循FIFO的原则进行处理。

       我们看到, 这种服务的方式是单个udp socket在8765端口上顺序处理客户端请求的, 这就是迭代服务器。

        在极端情况下, 假设有1亿个客户端进行并发连接, 那么, 这个队列肯定是满了, 多余的请求会被直接丢弃, 而udp服务器没有能力对客户端说: 尼玛的, 你们请求太多了, 我处理不过来, 我压力好大, 你们行行好, 控制下请求的量吧。

        udp服务器没这个能力, 这就是udp的流量控制缺失, 用人话来说, 就是udp没有流量控制机制。

  

        先说这么多。

     

转载地址:http://ajwti.baihongyu.com/

你可能感兴趣的文章
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>