UDP迭代服务器示例和UDP流量控制的缺失
来源:互联网 发布:淘宝商品图片拍摄技巧 编辑:程序博客网 时间:2024/06/07 03:34
我们知道, 有tcp服务器, 也有udp服务器, 这是按照协议来区分的。 如果按照服务方式来分, 还可以分为迭代服务器和并发服务器。
所谓迭代服务器, 就是单个进程/线程在单个端口上顺序处理所有客户端的请求, 而并发服务器就不一样了, 可以通过fork进程来并发处理多个客户端的请求。
在本文中, 我们主要来说说UDP迭代服务器和UDP流量控制的缺失。
我们来看一个最简单的UDP服务器(迭代服务器):
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>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没有流量控制机制。
先说这么多。
阅读全文
1 0
- UDP迭代服务器示例和UDP流量控制的缺失
- UDP流量控制之分析
- UDP流量控制之分析
- UDP的流量控制和数据报丢失问题试验分析
- TCP的流量控制 TCP与UDP的区别
- Linux网络编程——tcp、udp迭代服务器
- UDP客户/服务器程序示例
- UDP的使用示例
- UDP和多线程服务器
- TCP和UDP服务器的设计
- UDP协议的客户机和服务器通信
- 计算机网络基于UDP的服务器和客户端
- C#的UDP服务器
- udp示例
- TCP/UDP 详解 (可靠传输、流量控制、连接管理等核心章节的详解)
- 简单的UDP穿透示例
- UDP的API编程示例
- UDP 打洞示例 包含 服务器 客户端
- Codeforces831 C. Jury Marks
- NDK各个版本链接
- MapReduce安装配置
- 使用pt-query-digest分析mysql slow query log
- linux(debian)安装jdk8
- UDP迭代服务器示例和UDP流量控制的缺失
- C++递归递推算法之三角形划分平面区域
- eclipse for mac 官方汉化方法
- java &和&& |与|| 的区别
- 暑期学习一(C++预处理命令)
- tftp服务
- 浮点数精度丢失问题的解决
- 321GO隐私协议
- 久久热,99热破解教学