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

  

 

posted @ 2018-11-21 10:37  ashen~  阅读(146)  评论(0编辑  收藏  举报