Skynet(2)-Skynet服务的启动

Skynet的examples目录下的config文件设定了main.lua为第一个启动的服务,启动一个服务,会先调用这个服务
的skynet.start()函数,examples中的main.lua:

local skynet = require "skynet"
local sprotoloader = require "sprotoloader"

local max_client = 64

skynet.start(function()
	skynet.error("Server start")
	skynet.uniqueservice("protoloader")
	if not skynet.getenv "daemon" then
		local console = skynet.newservice("console")
	end
	skynet.newservice("debug_console",8000)
	skynet.newservice("simpledb")
	local watchdog = skynet.newservice("watchdog")
	skynet.call(watchdog, "lua", "start", {
		port = 8888,
		maxclient = max_client,
		nodelay = true,
	})
	skynet.error("Watchdog listen on", 8888)
	skynet.exit()
end)

下面我以一个自己写的简单的登录服务为例子讲解下服务的启动流程:(main.lua)

local skynet = require "skynet"
local max_client = 64

skynet.start(function()
	skynet.error("Server start")
	local loginserver = skynet.newservice("myloginserver")
	skynet.call(loginserver,"lua" ,"HELLO", "world"))
	skynet.error("loginserver listen on", 8888)
end)

首先,newservice是创建服务,我这里有有个myloginserver.lua文件,也就是一个登录服务,后面会讲到。
然后,使用skynet.call发送消息 ,skynet.call(addr, type, ...),这就是一个RPC调用
第一个参数你想要调用的服务地址,也可以是服务的名称
type类型发送一个消息到addr ,并等待对方的回应。

local watchdog = skynet.newservice("watchdog")
skynet.call(watchdog, "lua", "start", {
	port = 8888,
	maxclient = max_client,
	nodelay = true,
})

传入的addr就是服务地址;

skynet.call("simpledb", "lua", "get", "hello")

传入的addr就是服务的名称。

至于type,如果是service之间的RPC调用,其值一般都是lua,如果涉及到自定义的类型,才使用你在注册协议时候的类型名。

后面的...是可变参数,一般我们传一个命令和命令参数过去。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值