修改网卡缓冲以提高吞吐量

在单机并发上万的时候,发现 sendto 函数比较容易出现返回错误 EAGAIN,对应的错误消息为 Resource temporarily unavailable,这种情况下认为是应用层写入过快,导致网卡缓冲满了 使用这个命令来查看缓冲区现有大小 # ethtool -g eth1 Ring parameters for eth1: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumb……

阅读全文

UDP 包的边界

首先明确一个问题,如果定义了一个数据结构,大小是,比方说 32 个字节,然后 UDP 客户端连续向服务端发了两个包。现在假设这两个包都已经到达了服务器,那么服务端调用 recvfrom 来接收数据,并且缓冲区开得远大于 64,例如,开了 1024 个字节,那么,服务端的 recvfrom 函数是会一次收到两个数据包呢,还是只能收到一个……

阅读全文

Linux TCP UDP 混合

基本的思路是这样的:在服务器端,有两个机器,一个对外开启 TCP 监听,然后把监听到的请求内容送到后面的另外一台,或者多台轮询机器上,内网之间使用 UDP,然后等待业务逻辑机器处理完成,这个地方可以做成异步的,然后再返回到用户。 即是这样: client server_front server_back 下面来看代码,首先是 server_fro……

阅读全文

Linux UDP 收发实例

首先我们需要一个 struct.h #ifndef STRUCT_H #define STRUCT_H typedef struct _UDP_MSG { int add1; int add2; int sum; char str1[128]; char str2[128]; char cat[256]; } UDP_MSG; #endif /* STRUCT_H */ 然后是服务端的 #include <sys/types.h> #include <……

阅读全文

PHP 发 UDP 包时出错

今天金泉给了一个问题,说线上的腾讯 SDK PHP 版本的跑起来报错,看了一下,调用的代码类似这样 <?php require("inc/OpenApiV3.php"); // 应用基本信息 $appid = xxxxxx; $appkey = 'xxxxxxx'; // OpenAPI的服务器IP // 最新的API服务器地址请参考wiki文档: http://wiki.open.qq.com/wiki/API3.0%E6%96%……

阅读全文