百万并发连接的实践测试02

简介: 百万并发连接的实践测试02

本次主要解决上次遗留的数据结构问题

代码部分

头文件

#ifndef STRUCT_H_
#define STRUCT_H_
#include <stdio.h>
#define BUFFER_LENGTH       1024
#define EPOLL_LENGTH        1024
typedef struct conn_item conn_item_t;
typedef struct conn_block conn_block_t;
typedef struct reactor_node reactor_node_t;
int reactor_init(reactor_node_t* reactor);
void reactor_dest(reactor_node_t* reactor);
int reactor_block_connect(reactor_node_t* reactor);
int reactor_item_connect(reactor_node_t* reactor, int fd);
#endif

源文件

#include "struct.h"
#include <stdlib.h>
#include <string.h>
typedef struct conn_item
{
    int fd;
    char wbuffer[BUFFER_LENGTH];
    int wc;
    char rbuffer[BUFFER_LENGTH];
    int rc;
} conn_item_t;
typedef struct conn_block
{
    struct conn_item* conntions;
    struct conn_block* next;
} conn_block_t;
typedef struct reactor_node
{
    int epfd;
    int blcnt;
    struct conn_block* block_heander;
} reactor_node_t;
int reactor_init(reactor_node_t* reactor)
{
    if(!reactor)
        return -1;
    reactor->block_heander = malloc(sizeof(conn_block_t) + EPOLL_LENGTH * sizeof(conn_item_t));
    if(reactor->block_heander == NULL)
        return -1;
    reactor->block_heander->next = NULL;
    reactor->block_heander->conntions = (conn_item_t*)(reactor->block_heander + 1);
    reactor->blcnt = 1;
    reactor->epfd = epoll_create(1);
}
void reactor_dest(reactor_node_t* reactor)
{
    if(!reactor)
        return;
    if(!reactor->block_heander)
        free(reactor->block_heander);
    close(reactor->epfd);
}
int reactor_block_connect(reactor_node_t* reactor)
{
    if(!reactor)
        return -1;
    conn_block_t* block = malloc(sizeof(conn_block_t) + EPOLL_LENGTH * sizeof(conn_item_t));
    if(block == NULL)
        return -1;
    conn_block_t* temp = reactor->block_heander;
    while(temp->next != NULL)
        temp = temp->next;
    temp->next = block;
    block->conntions = (conn_item_t*)(block + 1);
    reactor->blcnt++;
    return 0;
}
int reactor_item_connect(reactor_node_t* reactor, int fd)
{
    int i = 0;
    if(!reactor)
        return -1;
    int pos = fd / EPOLL_LENGTH;
    while(pos > reactor->blcnt)
    {
        reactor_block_connect(reactor);
    }
    conn_block_t* blk = reactor->block_heander;
    for(; i < pos; i++)
    {
        blk = blk->next;
    }
    int idx = fd % EPOLL_LENGTH;
    blk->conntions[pos].fd = fd;
    memset(blk->conntions[pos].rbuffer, 0, BUFFER_LENGTH);
    memset(blk->conntions[pos].wbuffer, 0, BUFFER_LENGTH);
    blk->conntions[pos].rc = 0;
    blk->conntions[pos].wc = 0;
    return 0;
}

数据结构示意图

代码解读

上次我们是搞了一个很大的数组,这次我们做出一些优化。把做出一个链式结构,一个链表头,下面有很多块。块里面是conn_item,一个块里面有1024个conn_item。

目录
打赏
0
0
0
0
32
分享
相关文章
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
68 4
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
26 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
探索软件测试的深度与广度:从理论到实践
在数字化时代,软件已成为我们生活中不可或缺的一部分。随着技术的不断进步和用户需求的多样化,确保软件质量变得尤为重要。本文将深入浅出地介绍软件测试的核心概念、类型及其在软件开发生命周期中的重要性。我们将通过实际案例,展示如何实施有效的测试策略,并探讨自动化测试的未来趋势,旨在为读者提供一套完整的软件测试知识体系,帮助提升软件质量和开发效率。
探索软件测试的奥秘:从理论到实践
在软件开发的宇宙中,软件测试犹如一颗璀璨的星辰,指引着质量的方向。本文将带你穿梭于软件测试的理论与实践之间,揭示其内在的逻辑和魅力。从测试的重要性出发,我们将探讨不同类型的测试方法,并通过实际案例分析,深入理解测试用例的设计和应用。最后,我们将通过一个代码示例,展示如何将理论知识转化为实际操作,确保软件质量的同时,也提升你的测试技能。让我们一起踏上这段探索之旅,发现软件测试的无限可能。
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
114 7
探索软件测试的奥秘:从理论到实践
本文深入探讨了软件测试的基本概念、重要性、主要类型以及实施策略。通过分析不同测试阶段和相应的测试方法,文章旨在为读者提供一套完整的软件测试知识体系,帮助他们更好地理解和应用测试技术,确保软件产品的质量和可靠性。
84 4
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
92 2
电商API的测试与用途:深度解析与实践
在电子商务蓬勃发展的今天,电商API成为连接电商平台、商家、消费者和第三方开发者的重要桥梁。本文深入探讨了电商API的核心功能,包括订单管理、商品管理、用户管理、支付管理和物流管理,并介绍了有效的测试技巧,如理解API文档、设计测试用例、搭建测试环境、自动化测试、压力测试、安全性测试等。文章还详细阐述了电商API的多样化用途,如商品信息获取、订单管理自动化、用户数据管理、库存同步、物流跟踪、支付处理、促销活动管理、评价管理、数据报告和分析、扩展平台功能及跨境电商等,旨在为开发者和电商平台提供有益的参考。
97 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等