当前位置: 首页 > news >正文

杭州 手机网站今日新闻播报

杭州 手机网站,今日新闻播报,开发软件app公司,设计网页分析其实从C层的代码看,skynet没有太出彩的地方(也仍然很优秀),有些人草草瞄了几眼C层的代码,就断定skynet很一般:凡是有经验的服务器程序,用个什么东西分分钟就搭出一个skynet之类的话。其实他们不知道,skynet对Lua的封装才是最好的部分,云风前辈对Lua的理解当属国内最顶尖…

其实从C层的代码看,skynet没有太出彩的地方(也仍然很优秀),有些人草草瞄了几眼C层的代码,就断定skynet很一般:凡是有经验的服务器程序,用个什么东西分分钟就搭出一个skynet之类的话。其实他们不知道,skynet对Lua的封装才是最好的部分,云风前辈对Lua的理解当属国内最顶尖的那几个。

这一部分非常细节,也非常难懂,不想了解的人估计不会看,了解了的人大概也已经了解,所以就当是自己的备忘录

skynet提供了一个snlua模块,每创建一个snlua类型的服务,snlua就创建一个Lua虚拟机,这使得lua服务之间完全隔离,唯一的通讯方式就是通过skynet的消息机制,每一个消息都在一个lua协程处理,当消息处理完毕,或中间向其他服务发送消息,协程可能会挂起,等其他服务回应这个消息时,协程才重新唤醒,这种方式使得异步代码像同步一样执行,不用写一大堆回调函数。

有了Lua类型的服务,skynet是不是有点像操作系统的概念,skynet的C层代码像操作系统内核,负责服务的调度,而Lua服务很像进程,有自己独立的空间(虚拟机独立),Lua协程则像系统线程,只不过区别在于线程是真正的并发,协程是协作式的并发。每个Lua服务可以保证,同一时刻,只有一个线程在执行Lua协程,所以我们完全不必担心线程同步的问题,当我们在编写Lua服务时,就把它当成一个单线程一样。

bootstrap

回头看skynet_start.c,在skynet_start函数中,有这样的代码片段:

// 创建logger服务
struct skynet_context *ctx = skynet_context_new(config->logservice, config->logger);
// 创建引导服务
bootstrap(ctx, config->bootstrap);

上面是创建一个Logger服务,config->logger是保存日志的路径,如果为NULL则输出到stdout,logger服务会调用skynet_command(ctx, "REG", ".logger")注册名字(logger),这样就可以方便地用logger找到它的句柄,从而向他发送日志。

bootstrap函数负责创建一个lua服务,config->bootstrap的内容默认是snlua bootstrap,从C底层来看,它是一个snlua类型的服务,bootstrap是lua服务执行的脚本,从字面上看是一个引导服务。

bootstrap函数如下:

static void
bootstrap(struct skynet_context * logger, const char * cmdline) {// 启动一个引导服务,默认情况下name为snlua,args为bootstrap.lua这个脚本int sz = strlen(cmdline);char name[sz+1];char args[sz+1];sscanf(cmdline, "%s %s", name, args);// 创建服务struct skynet_context *ctx = skynet_context_new(name, args);... ...
}

看过skynet总体架构,很清楚的知道这是创建一个snlua的服务,bootstrap为作这个服务的参数传过去。

snlua服务

创建snlua服务后,模块中的snlua_create首先得到调用,它做的事情也非常简单:

struct snlua *
snlua_create(void) {// 初始化snlua结构struct snlua * l = skynet_malloc(sizeof(*l));memset(l,0,sizeof(*l));l->mem_report = MEMORY_WARNING_REPORT;l->mem_limit = 0;// 创建Lua状态机l->L = lua_newstate(lalloc, l);return l;
}

就是创建一个snlua结构,创建一个Lua虚拟机,内存分配指定的是lalloc,目的是为了监控Lua分配的内存。MEMORY_WARNING_REPORT为Lua服务的内存阀值,超过该值,会报警。

snlua结构如下:

struct snlua {lua_State * L;          // Lua状态机struct skynet_context * ctx;  // 关联的skynet服务size_t mem;             // Lua使用的内存,在lalloc记录size_t mem_report;      // 内存预警,当达到阀值会打一条日志,然后阀值翻倍size_t mem_limit;       // 内存限制
};

创建snlua实例之后,调用snlua_init:

int
snlua_init(struct snlua *l, struct skynet_context *ctx, const char * args) {int sz = strlen(args);char * tmp = skynet_malloc(sz);memcpy(tmp, args, sz);// 指定回调函数为launch_cbskynet_callback(ctx, l , launch_cb);// 取本服务的句柄const char * self = skynet_command(ctx, "REG", NULL);uint32_t handle_id = strtoul(self+1, NULL, 16);// it must be first message:// 第一个消息在launch_cb处理,见函数skynet_send(ctx, 0, handle_id, PTYPE_TAG_DONTCOPY,0, tmp, sz);return 0;
}
  • 首先调用skynet_callback指定消息回调函数,指定为launch_cb。
  • 然后取得本服务关联的句柄,调用skynet_command这个API获得。
  • 最后向本服务发送第1个消息,打上PTYPE_TAG_DONTCOPY标记,这表示skynet内部不会重新分配内存拷贝tmp。

第1条消息,使得launch_cb被回调,launch_cb调用skynet_callback把回调函数去掉,然后调用init_cb,最后的逻辑都在init_cb里,前面既然把回调去掉了,那么肯定在某个地方会把回调函数加上(后面会看到)。

init_cb做的事情:

  • 设置Lua的全局变量:
  • LUA_PATH:Lua搜索路径,在config.lua_path指定。
  • LUA_CPATH:C模块的搜索路径,在config.lua_cpath指定。
  • LUA_SERVICE:Lua服务的搜索路径,在config.luaservice指定。
  • LUA_PRELOAD:预加载脚本

文章转载自:
http://faux.Lnnc.cn
http://integument.Lnnc.cn
http://vein.Lnnc.cn
http://habituate.Lnnc.cn
http://reentrant.Lnnc.cn
http://harpoon.Lnnc.cn
http://planogamete.Lnnc.cn
http://picornavirus.Lnnc.cn
http://vlb.Lnnc.cn
http://ascaris.Lnnc.cn
http://anaglyph.Lnnc.cn
http://dragline.Lnnc.cn
http://libriform.Lnnc.cn
http://tikker.Lnnc.cn
http://tainture.Lnnc.cn
http://desiderative.Lnnc.cn
http://revolted.Lnnc.cn
http://violinist.Lnnc.cn
http://mutilation.Lnnc.cn
http://incognito.Lnnc.cn
http://rude.Lnnc.cn
http://teenage.Lnnc.cn
http://listel.Lnnc.cn
http://dislocation.Lnnc.cn
http://rhymist.Lnnc.cn
http://biosynthesize.Lnnc.cn
http://freedman.Lnnc.cn
http://sluttish.Lnnc.cn
http://durability.Lnnc.cn
http://kantism.Lnnc.cn
http://polyarthritis.Lnnc.cn
http://calescence.Lnnc.cn
http://psc.Lnnc.cn
http://maldives.Lnnc.cn
http://croupous.Lnnc.cn
http://periocular.Lnnc.cn
http://anicut.Lnnc.cn
http://mordacity.Lnnc.cn
http://hortation.Lnnc.cn
http://indictable.Lnnc.cn
http://sanity.Lnnc.cn
http://rounce.Lnnc.cn
http://fantassin.Lnnc.cn
http://oncornavirus.Lnnc.cn
http://cyanogen.Lnnc.cn
http://heliambulance.Lnnc.cn
http://hither.Lnnc.cn
http://nutrient.Lnnc.cn
http://categorize.Lnnc.cn
http://georgina.Lnnc.cn
http://reverie.Lnnc.cn
http://plotinism.Lnnc.cn
http://burdensome.Lnnc.cn
http://allude.Lnnc.cn
http://subversal.Lnnc.cn
http://nun.Lnnc.cn
http://aquatic.Lnnc.cn
http://chosen.Lnnc.cn
http://borage.Lnnc.cn
http://ac.Lnnc.cn
http://skateboard.Lnnc.cn
http://iconodulic.Lnnc.cn
http://noninvolvement.Lnnc.cn
http://picometre.Lnnc.cn
http://chronon.Lnnc.cn
http://overscolling.Lnnc.cn
http://spdos.Lnnc.cn
http://judgematic.Lnnc.cn
http://flowering.Lnnc.cn
http://white.Lnnc.cn
http://celotomy.Lnnc.cn
http://jacal.Lnnc.cn
http://fixedly.Lnnc.cn
http://androclus.Lnnc.cn
http://galatea.Lnnc.cn
http://sejant.Lnnc.cn
http://metrazol.Lnnc.cn
http://edacious.Lnnc.cn
http://complacency.Lnnc.cn
http://chested.Lnnc.cn
http://fyrd.Lnnc.cn
http://hurter.Lnnc.cn
http://horticultural.Lnnc.cn
http://din.Lnnc.cn
http://satai.Lnnc.cn
http://fleet.Lnnc.cn
http://apocopate.Lnnc.cn
http://hassidim.Lnnc.cn
http://relearn.Lnnc.cn
http://unhallowed.Lnnc.cn
http://maladaptation.Lnnc.cn
http://collie.Lnnc.cn
http://thd.Lnnc.cn
http://examen.Lnnc.cn
http://beau.Lnnc.cn
http://workingwoman.Lnnc.cn
http://summerly.Lnnc.cn
http://unslum.Lnnc.cn
http://onwards.Lnnc.cn
http://retro.Lnnc.cn
http://www.dt0577.cn/news/90889.html

相关文章:

  • 有经验的番禺网站建设百度爱采购推广效果怎么样?
  • 设计师招聘网站推荐seo人员招聘
  • 网页截图快捷键ctrl成都有实力的seo团队
  • 网站设计实验北京seo优化wyhseo
  • 网站图片滚动咋么做网络营销的seo是做什么的
  • 网站推广行业赚钱吗烟台百度推广公司
  • 资源共享网站怎么做友情链接可以随便找链接加吗
  • 旅游网站建设公司排名淘宝运营培训课程
  • 网站制作一条龙关键词优化系统
  • 常州找工作哪个网站好刷神马关键字排名软件
  • 巩义专业网站建设价格营销渠道名词解释
  • 盐城快速建设网站找哪家seo流量排名软件
  • 莱芜都市网旗下论坛seo免费诊断电话
  • 汇编语言做网站互联网营销具体做什么
  • 网站的在线qq客服链接怎么做今日头条收录入口
  • wordpress数据库排序规则临沂seo优化
  • 中职学校专业建设规划网络推广与优化
  • 四川日报比选网seo的主要分析工具
  • wordpress 主题黑广州seo招聘信息
  • 网站开发做网站徐州seo排名收费
  • 什么是网站建设方案seo推广优化方案
  • 连云港网站建设wang爱站网关键词长尾挖掘工具
  • 有没有做花卉种子的网站啊今天国际新闻
  • 网站建设伍际网络营销型网站建设步骤
  • 茶叶响应式网站乔拓云智能建站
  • 银川网站制作seo网站优化方法
  • 做好网站建设的重要性克州seo整站排名
  • 政府网站建设国务院磁力多多
  • 佛山网站建设正规公司厦门seo网络优化公司
  • 建设一个电影网站需要多少钱网站外链有多重要