skynet概述skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分,所以尽可以把它用于其它领域。
skynet 并不是一个开箱即用的引擎,使用它需要先对框架本身的结构有所了解,理解框架到底帮助开发者解决怎样的问题。如果你希望使用这个框架来开发网络游戏服务器,你将发现,skynet 并不会引导你把服务器搭建起来。它更像是一套工具,只有你知道你想做什么,它才会帮助你更有效率的完成。
理解 skynet 并不复杂,希望通过读完本篇文章,你就能掌握它。这篇文章没有提及任何 api 的具体使用方法、如何搭建 skynet 开发环境、也没有手把手示范如何写出一个简单的游戏服务器,而仅仅介绍 skynet 的基础概念。所以在真正使用 skynet 做开发时还需要参考 wiki 中的其它文档。
框架 Framework作为服务器,通常需要同时处理多份类似的业务。例如在网络游戏中,你需要同时向数千个用户提供服务;同时运作上百个副本,计算副本中的战斗、让 NPC 通过 AI 工作起来,等等。在单核年代,我们通常在 CPU 上轮流处理这些业务,给用户造成并行 ...
skynet
未读skynet
未读Skynet基本概况工作流程主要工作流程图
上图中所示的每个队列都关联一个服务的。所有的队列连接成一个大链表。
一个工作线程主要工作流程:
1234567while(true) { queue = get_one_queue(global_queue) //通过全局队列拿到一个私有队列 ctx = get_ctx( queue->handle ) //通过队列拿到一个服务 msg = get_one_message(queue) //从队列里面取出一个消息 ctx->callback(msg) //调用服务的回调函数 ,在这个回调函数里面再调用一个固定的 lua函数 }
一个skynet节点,也就是一个skynet进程。它启动的时候会创建多个线程:
网络线程:
接收skynet外部的网络请求,然后push到服务的队列。
当服务需要把数据发送给外部时,实质上是 服务—>网络线程—>外部
定时器线程:把定时器消息push到某个服务。当服务在处理定时器消息时,就可以认为是定时器事件触发了。
监听线程:主要是发现工作线程 ...
skynet
未读skynet
未读skynet
未读skynet
未读skynet
未读skynet
未读skynet
未读

