Skip to content

《udp丢包》 #24

Description

@bingtaoli

我们项目的自动化框架是这样的,在python脚本里面发送请求到进程中执行相关操作,检查日志看是否符合预期。发送数据是udp:

    def do_operation(self, opr, msg, tid=-1, print=True):
        req = {
            'tid': tid,
            'msg': {
                'opr': opr,
                'data': msg
            }
        }
        data = json.dumps(req)
        if print:
            logger.info(f'do operation : {data} to {self.sport}')
        self.sk.sendto(data.encode(), ('127.0.0.1', self.sport))

这几天在性能测试时候,发送量比较快就会出现丢包,而且是集中在发送循环的后面丢包。

早上问了我们的架构师旭哥,他推断是我们的进程接收数据buff满了,udp发送端也不会确保数据发送成功,udp本身也不可靠。

这样性能测试只能分开到多个进程去测试了,单个peer_agent接收数据太多容易丢数据。

查了下资料发现,起udp服务时候可以指定buff大小:

int nRecvBuf = 700 * 1024;//设置为700K
    if (0 != setsockopt(m_sock, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int)))
    {
        TRACE(_T("setsockopt buf size failed.\n"), WSAGetLastError());
        return FALSE;
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions