skynet学习笔记 02

服务类型

  • 普通服务
  • 全局唯一服务(只能生成一个服务实例)
普通服务

创建接口skynet.newservice(luaServerName)

  1. 用于启动一个新的 Lua 服务,luaServerName是脚本的名字(不用写 .lua 后缀)。
  2. 只有被启动的脚本的 start 函数返回后,这个 API 才会返回启动的服务的地址,这是一个阻塞 API 。
  3. 如果被启动的脚本在初始化环节抛出异常,skynet.newservice 也会执行失败。
  4. 如果被启动的脚本的 start 函数是一个永不结束的循环,那么 newservice 也会被永远阻塞住。

启动一个test服务4-test.lua

local skynet = require "skynet"

skynet.start(function()
        skynet.error("my new service")
        skynet.newservice("1-test")  -- 启动另一个服务的文件
        skynet.error("new test service")
end)

在这里插入图片描述启动两个test服务5-test.lua:

local skynet = require "skynet"

skynet.start(function()
        skynet.error("my new service")
        skynet.newservice("1-test")
        skynet.error("test servicer 1")
        skynet.newservice("1-test")
        skynet.error("test servicer 2")

end)

启动两个test服务

全局唯一服务
  • 创建接口:
skynet.uniqueservice(servicename, ...) 
skynet.uniqueservice(true, servicename, ...) 

当带参数true时,则表示此服务在所有节点之间是唯一的。第一次创建返回服务地址,第二次创建不会创建服务,而是返回第一次创建的服务地址

  • 查询接口
skynet.queryservice(servicename, ...) 
skynet.queryservice(true, servicename, ...) 

如果还没有创建过目标服务则一直等下去,直到目标服务被其他服务触发创建
当带参数true则表示查询在所有节点中唯一的服务是否存在

测试uniqueservice接口6-test.lua

local skynet = require "skynet"

local args = {}

table.insert(args, 1, "1-test")
table.insert(args, 1, "1-test")

skynet.start(function()
        skynet.error(args[1], args[2], #args)

        local us1 = 0
        local us2 = 0

        skynet.error("test unique service")

        skynet.error("1, 所有")
        us1 = skynet.uniqueservice(true, args[1])

        skynet.error("2, 当前")
        us2 = skynet.uniqueservice(args[2])

        skynet.error("全部节点 全局唯一句柄",us1)
        skynet.error("当前节点 全局唯一句柄",us2)

end)

在这里插入图片描述第二次执行,没有创建新的服务

测试queryservice接口7-test.lua

local skynet = require "skynet"

local args = {}

table.insert(args, 1, "1-test")
table.insert(args, 1, "1-test")

skynet.start(function()
        skynet.error(args[1], args[2], #args)

        local us1 = 0
        local us2 = 0

        skynet.error("test unique service")

        skynet.error("1, 所有")
        us1 = skynet.queryservice(true, args[1])

        skynet.error("2, 当前")
        us2 = skynet.queryservice(args[2])

        skynet.error("全部节点 全局唯一句柄",us1)
        skynet.error("当前节点 全局唯一句柄",us2)

end)

不启动test直接启动会阻塞
阻塞
启动test后执行
在这里插入图片描述

-----------------------暂停笔记
视频 8 博文 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值