skynet学习笔记03— 服务

news2025/1/15 19:39:13

01、API

  • newservice(name, ...): 阻塞的形势启动一个名为 name 的新服务,待start函数执行完后会返回这个服务的地址。
  • uniqueservice(name, ...):针对于当前节点,启动一个唯一服务(相当于单例),如果服务该服务已经启动,则返回已启动的服务地址。
  • queryservice(true, name, ...):针对于所有节点,启动一个唯一服务。
  • queryservice(name) :查询一个由uniqueservice 启动的唯一服务的地址,若该服务尚未启动则等待。
  • queryservice(true,name): 查询一个由uniqueservice 启动的唯一服务的地址,若该服务尚未启动则等待。

02、Demo1 服务与唯一服务

配置

project = "../project/02service/"

thread = 8
cpath = "./cservice/?.so"
bootstrap = "snlua bootstrap"
start = "serviceTest"
harbor = 1 
address = "127.0.0.1:2526"
master = "127.0.0.1:2013"
standalone = "0.0.0.0:2013" -- 主节点
lualoader = "./lualib/loader.lua"
luaservice = "./service/?.lua;"..project.."?.lua;"..project.."worker/?.lua;"
lua_path =  "./lualib/?.lua;" .. "./lualib/?/init.lua;"
lua_cpath = "./luaclib/?.so"

代码

work1.lua

local skynet = require "skynet"

local param1 = ""
local param2 = ""

skynet.init(function ()
    skynet.error("[work1] init work param1",param1,"param2",param2)
end)

local function initParams(p1, p2)
    skynet.error("[work1] initParams p1",p1,"p2",p2)
    param1 = p1
    param2 = p2
end

-- 调用初始化函数,...是不定参数,会从skynet.newservice的第二个参数开始透传过来
initParams(...)

local function doWork()
    while true do
        skynet.error("---------work----------------")
        skynet.sleep(200)
    end
end

skynet.start(function ()
   skynet.error("worker start param1 = ",param1,"param2 = ",param2)
   -- doWork()
end)

serviceTest.lua

local skynet = require "skynet"

local function test1()
	local h1 =  skynet.newservice("work1","work001","10086")
	local h2 =  skynet.newservice("work1","work002","1008611")
	local h3 =  skynet.uniqueservice("work1","work003","1008612")
	local h33 =  skynet.uniqueservice("work1","work004","1008613") -- 这里并没有调用initParams与init函数
	skynet.error("h1",h1,"h2",h2,"h3",h3,"h33",h33)
end

skynet.start(function()
	skynet.error("[service main] start")
	skynet.error("-----------test service begin--------------")
	test1();
	skynet.error("-----------test service end--------------")	
	skynet.error("[service main] end")
	skynet.exit()
end)

运行结果

mhzzj@mhzzj-virtual-machine:~/work/skynetStudy/skynet$ ./skynet ./examples/02serviceconfig 

在这里插入图片描述

03、Demo1唯一服务与全局唯一服务

配置

project = "../project/02service/"

thread = 8
cpath = "./cservice/?.so"
bootstrap = "snlua bootstrap"
start = "serviceTest"
harbor = 2 -- 修改节点
address = "127.0.0.1:2527" -- 修改从节点端口
master = "127.0.0.1:2013"
lualoader = "./lualib/loader.lua"
luaservice = "./service/?.lua;"..project.."?.lua;"..project.."worker/?.lua;"
lua_path =  "./lualib/?.lua;" .. "./lualib/?/init.lua;"
lua_cpath = "./luaclib/?.so"

代码

local function test2()
	local h1 =  skynet.uniqueservice("work1","work001","10086")
	local h2 =  skynet.uniqueservice("work1","work002","1008611")
	local h3 =  skynet.uniqueservice("work1","work003","1008612")
	skynet.error("h1",h1,"h2",h2,"h3",h3)
	local h33 = skynet.queryservice("work1")
	skynet.queryservice("work1")
end

skynet.start(function()
	skynet.error("[service main] start")
	skynet.error("-----------test service begin--------------")
	test2();
	skynet.error("-----------test service end--------------")	
	skynet.error("[service main] end")
	skynet.exit()
end)

运行结果

主节点

mhzzj@mhzzj-virtual-machine:~/work/skynetStudy/skynet$ ./skynet ./examples/02serviceconfig
[:01000009] -----------test service begin--------------
[:0100000a] LAUNCH snlua work1 work001 10086
[:0100000a] [work1] initParams p1 work001 p2 10086
[:0100000a] [work1] init work param1 work001 param2 10086
[:0100000a] worker start param1 =  work001 param2 =  10086
[:0100000b] LAUNCH snlua work1 work003 1008612
[:0100000b] [work1] initParams p1 work003 p2 1008612
[:0100000b] [work1] init work param1 work003 param2 1008612
[:0100000b] worker start param1 =  work003 param2 =  1008612
[:01000009] h1 16777226 h2 16777226 h3 16777227
[:01000009] h33 16777226 h333 16777227
[:01000009] -----------test service end--------------

从节点

mhzzj@mhzzj-virtual-machine:~/work/skynetStudy/skynet$ ./skynet ./examples/02serviceconfig2
[:02000007] -----------test service begin--------------
[:02000008] LAUNCH snlua work1 work001 10086
[:02000008] [work1] initParams p1 work001 p2 10086
[:02000008] [work1] init work param1 work001 param2 10086
[:02000008] worker start param1 =  work001 param2 =  10086
[:02000007] h1 33554440 h2 33554440 h3 16777227
[:02000007] h33 33554440 h333 16777227
[:02000007] -----------test service end--------------

04、相关代码

https://gitee.com/mhz-zzj/skynet-study

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1197783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

土壤含水量的计算

土壤含水量的计算 土壤水分的表示方法 一般所说的土壤水分,实际上是指用烘干法在105-110摄氏度温度下能从土壤中被驱逐出来的水。土壤水分含量即土壤含水量,它是指土壤中所含有的水分的数量。土壤含水量可以用不同的方法表示,最常用的表示方…

【Git】Git分支与标签掌握这些技巧让你成为合格的码农

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Git》。🎯🎯 &#x1f449…

src/main/resources/fonts/songti.ttc not found as file or resource.

https://blog.csdn.net/Lewishhhh/article/details/122812272文章浏览阅读4.8k次,点赞2次,收藏7次。背景遇到个需求需要用Java导出PDF文件,权衡之下选择了iText,Java操作pdf的各个开源库之间的对比可以参考https://blog.csdn.net/…

论文笔记:AttnMove: History Enhanced Trajectory Recovery via AttentionalNetwork

AAAI 2021 1 intro 1.1 背景 将用户稀疏的轨迹数据恢复至细粒度的轨迹数据是十分重要的恢复稀疏轨迹数据至细粒度轨迹数据是非常困难的 已观察到的用户位置数据十分稀疏,使得未观察到的用户位置存在较多的不确定性真实数据中存在大量噪声,如何有效的挖…

大数据毕业设计选题推荐-生产大数据平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Centos7安装PostgreSQL 14

环境: Centos7安装PostgreSQL_14版本数据库; 打开官方网站:PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本: 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…

Java编程--synchronized/死锁/可重入锁/内存可见性问题/wait()、notify()

前言 逆水行舟,不进则退!!! 目录 线程安全 synchronized原子锁 可重入锁(递归锁) 死锁 内存可见性问题 wait()、notify() 线程安全 线程安全是指在多线程环境下,程序的行为表现仍然符合我…

华为ensp:静态默认路由

静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…

HIKVISION流媒体管理服务器后台任意文件读取漏洞

默认账号密码为 admin/12345 构造payload /systemLog/downFile.php?fileName../../../../../../../../../../../../../../../windows/system.ini漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播…

无需标注海量数据,目标检测新范式OVD

当前大火的多模态GPT-4在视觉能力上只具备目标识别的能力,还无法完成更高难度的目标检测任务。而识别出图像或视频中物体的类别、位置和大小信息,是现实生产中众多人工智能应用的关键,例如自动驾驶中的行人车辆识别、安防监控应用中的人脸锁定…

若依如何进行页面路由跳转,路由跳转时如何携带参数(超详细图文教程)

我们经常会有这样需求,当我们在一个页面时,想要跳转到另一个页面,但是跳转的同时还需要携带参数。那么这种情况在若依系统中该如何做呢,下面我们来说一下。 文章目录 问题提出:一、创建目标页面的路由(也就是图2的路由…

C语言--有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

一.解体思路 设一个结构体数组,数组中包含3个元素; 每个元素中的信息应包括候选人的姓名和得票数;输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成 员的值加1;输出所有元素的信息。 …

win下安卓打包指南

win下安卓打包指南 0、缘起 换了台电脑竟然忘了怎么打包,还好有笔记,用软件打包也挺好,但是我感觉用 命令行 更有操作感,分享下。 1、下载并配置apktool(放在C://Windows无需配置环境变量,需要java环境&…

【算法练习Day45】最长公共子序列不相交的线最大子数组和

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 最长公共子序列不相交的线最…

Linux输入与输出设备的管理

计算机系统中CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit)的组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样,它们知道如何应对硬盘…

如何在 Windows 11 上恢复丢失的文件?(4种方法)

在 Windows 11 设备上丢失重要文件感觉就像一场噩梦。这是您希望时光倒流并撤消意外删除或避免那些意外的系统故障的时刻之一。这种情况带来的挫败感和焦虑感简直难以承受。但是,嘿,不要绝望!我们随时为您提供帮助。 在这本真诚的指南中&…

CA 陪你看 Ignite | 聚焦 Microsoft Ignite 2023

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

android studio 修改图标

Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境(IDE)。在开发过程中,我们可以根据自己的需求修改 Android Studio 的图标,以个性化我们的开发环境。 本文将介绍如何在…

XC1010非隔离型、低成本的PWM功率开关、AC-DC 220V转5V 200mA小电流芯片

XC1010是一款非隔离型、高集成度且低成本的PWM功率开关,适用于降压型和升降压型电路。 XC1010采用高压单晶圆工艺,在同一片晶圆上集成有 500V 高压 MOSFET 和采用开关式峰值电流模式控制的控制器。在全电压输入的范围内可以保证高精度的 5V 默认…