skynet 源码阅读--2-服务启动 与消息交互
从skynet_main.c的入口看:
1. 初始化环境信息
2. 根据配置文件来加载一些模块
---- logger
struct skynet_context *ctx = skynet_context_new(config->logservice, config->logger);
---- snlua
bootstrap(ctx, config->bootstrap);
3. 启动线程
----monitor
---- timer
---- socket
create_thread(&pid[0], thread_monitor, m); create_thread(&pid[1], thread_timer, m); create_thread(&pid[2], thread_socket, m);
---- worker n threads which process msg in queue by weight
create_thread(&pid[i+3], thread_worker, &wp[i]);
worker n threads : do cb .
* queue pop
---- process msg in queue
* queue push
example:
skynet.send(sServiceTs, skynet.PTYPE_TEXT, "222");
luaopen_clientsocket(lua_State *L) { luaL_checkversion(L); luaL_Reg l[] = { { "connect", lconnect }, { "recv", lrecv }, { "send", lsend }, { "close", lclose }, { "usleep", lusleep }, { NULL, NULL }, };
session = skynet_send(context, 0, dest, type, session , msg, len);
skynet_mq_push(ctx->queue, &smsg);
很多时候我都在期待3年后的自己是一个什么样的,5年后自己又是一个什么样的。因为未知,所以生命才更加精彩。