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; }
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; }
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; }
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; }