内容纲要

skynet 构建了一个单进程多线程的任务处理框架,处理网络时是单线程,然后将消息投递到多线程(线程池)任务对列,每一个任务是一个沙盒。跟 libuv 的概念差不多。不过 libuv 的任务不是在沙盒里运行,不过用lua 包装的 luv, 任务可以在沙盒里运行。

skynet 的配置文件定义了 lua 模块加载路径,然后并不需要在文件中 require 模块来使用, 新的模块在 skynet 中称为服务,你可以直接通过工厂方法来实例化一个服务,例如

[code]
skynet.newservice("service1")
[/code]

main.lua, skynet.start 在一个沙盒中运行

[code]
local skynet = require "skynet"

— 启动服务(启动函数)
skynet.start(function()
— 启动函数里调用Skynet API开发各种服务
print("======Server start=======")
— skynet.newservice(name, …)启动一个新的 Lua 服务(服务脚本文件名)
skynet.newservice("service1")

— 退出当前的服务
— skynet.exit 之后的代码都不会被运行。而且,当前服务被阻塞住的 coroutine 也会立刻中断退出。
skynet.exit()
end)
[/code]

service1.lua
[code]
— 每个服务独立, 都需要引入skynet
local skynet = require "skynet"

— 这里可以编写各种服务处理函数

skynet.start(function()
print("==========Service1 Start=========")
— 这里可以编写服务代码,使用skynet.dispatch消息分发到各个服务处理函数(后续例子再说)
end)
[/code]

发表评论

电子邮件地址不会被公开。 必填项已用*标注