Esempio n. 1
0
int main() {
    int i = 0;
    kchannel_ref_t* connector = 0;
    /* 创建循环 */
    kloop_t* loop = knet_loop_create();
    /* 创建监听者 */
    kchannel_ref_t* acceptor = knet_loop_create_channel(loop, 8, 1024);
    /* 设置回调 */
    knet_channel_ref_set_cb(acceptor, acceptor_cb);
    /* 监听 */
    knet_channel_ref_accept(acceptor, 0, 80, 500);
    /* 连接 */
    for (; i < MAX_CONNECTOR; i++) {
        /* 创建客户端 */
        connector = knet_loop_create_channel(loop, 8, 1024);
        /* 设置回调 */
        knet_channel_ref_set_cb(connector, connector_cb);
        knet_channel_ref_connect(connector, "127.0.0.1", 80, 2);
    }
    /* 启动 */
    knet_loop_run(loop);
    /* 销毁, connector, acceptor不需要手动销毁 */
    knet_loop_destroy(loop);
    return 0;
}
Esempio n. 2
0
int _create_acceptor_channel(kframework_acceptor_config_t* ac, kloop_t* loop) {
    int            error   = error_ok;
    kchannel_ref_t* channel = 0;
    /* 建立监听管道 */
    channel = knet_loop_create_channel(loop, framework_acceptor_config_get_client_max_send_list_count(ac),
        framework_acceptor_config_get_client_max_recv_buffer_length(ac));
    verify(channel);
    knet_channel_ref_set_cb(channel, acceptor_cb);
    knet_channel_ref_set_user_data(channel, ac);
    /* 监听 */
    error = knet_channel_ref_accept(channel, framework_acceptor_config_get_ip(ac),
        framework_acceptor_config_get_port(ac), framework_acceptor_config_get_backlog(ac));
    if (error != error_ok) {
        knet_channel_ref_destroy(channel);
    }
    return error;
}
Esempio n. 3
0
int main() {
    int i = 0;
    kloop_t* loop = knet_loop_create();
    kchannel_ref_t* acceptor = 0;
    kchannel_ref_t* connector = 0;
    acceptor = knet_loop_create_channel(loop, 8, 1024);
    knet_channel_ref_accept(acceptor, 0, 8000, 50);
    knet_channel_ref_set_cb(acceptor, acceptor_cb);
    broadcast = knet_broadcast_create();
    for (; i < MAX_CONNECTOR; i++) {
        connector = knet_loop_create_channel(loop, 8, 1024);
        knet_channel_ref_set_cb(connector, connector_cb);
        knet_channel_ref_connect(connector, "127.0.0.1", 8000, 0);
    }

    knet_loop_run(loop);
    knet_broadcast_destroy(broadcast);
    knet_loop_destroy(loop);

    return 0;
}
Esempio n. 4
0
int main() {
    int i = 0;
    int error = 0;
    kloop_t* main_loop = 0;
    kloop_t* sub_loop[MAX_LOOP] = {0};
    kthread_runner_t* runner[MAX_LOOP] = {0};
    kchannel_ref_t* acceptor = 0;
    kchannel_ref_t* connector = 0;
    kloop_balancer_t* balancer = 0;
    int times = 0;

    /* 建立一个负载均衡器 */
    balancer = knet_loop_balancer_create();
    /* 创建多个线程,每个线程运行一个kloop_t */
    for (i = 0; i < MAX_LOOP; i++) {
        sub_loop[i] = knet_loop_create();
        knet_loop_balancer_attach(balancer, sub_loop[i]);
        runner[i] = thread_runner_create(0, 0);
        thread_runner_start_loop(runner[i], sub_loop[i], 0);
    }
    main_loop = knet_loop_create();
    knet_loop_balancer_attach(balancer, main_loop);

    acceptor = knet_loop_create_channel(main_loop, 8, 1024 * 8);
    knet_channel_ref_set_cb(acceptor, acceptor_cb);
    error = knet_channel_ref_accept(acceptor, 0, 80, 5000);
    if (error_ok != error) {
        printf("knet_channel_ref_accept failed: %d\n", error);
    }
    
    /* 多次测试 */
    for (; times < TEST_TIMES; times++) {
        total_connected = 0;
        recv_count = 0;
        client_count = MAX_CLIENT;
        for (i = 0; i < MAX_CLIENT; i++) {
            connector = knet_loop_create_channel(main_loop, 8, 8192);
            knet_channel_ref_set_cb(connector, connector_cb);
            knet_channel_ref_set_timeout(connector, 2);
            knet_channel_ref_connect(connector, "127.0.0.1", 80, 2);
        }
        while (client_count > 0) {
            /* 主线程 */
            error = knet_loop_run_once(main_loop);
        }
        if (error != error_ok) {
            printf("knet_loop_run() failed: %d\n", error);
        }
    }
    for (i = 0; i < MAX_LOOP; i++) {
        thread_runner_stop(runner[i]);
        thread_runner_join(runner[i]);
        thread_runner_destroy(runner[i]);
    }
    for (i = 0; i < MAX_LOOP; i++) {
        knet_loop_destroy(sub_loop[i]);
    }
    knet_loop_destroy(main_loop);
    knet_loop_balancer_destroy(balancer);
    return 0;
}