skynet学习笔记03— 服务
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 = p1param2 = p2
end-- 调用初始化函数,...是不定参数,会从skynet.newservice的第二个参数开始透传过来
initParams(...)local function doWork()while true doskynet.error("---------work----------------")skynet.sleep(200)end
endskynet.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)
endskynet.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")
endskynet.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
相关文章:

skynet学习笔记03— 服务
01、API newservice(name, ...): 阻塞的形势启动一个名为 name 的新服务,待start函数执行完后会返回这个服务的地址。uniqueservice(name, ...):针对于当前节点,启动一个唯一服务(相当于单例),…...

34 Feign最佳实践
2.4.2.抽取方式 将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包…...

软文推广中如何搭建媒体矩阵
媒体矩阵简单理解就是在不同的媒体平台上,根据运营目标和需求,建立起全面系统的媒体布局,进行多平台同步运营。接下来媒介盒子就来和大家聊聊,企业在软文推广过程中为什么需要搭建媒体矩阵,又该如何搭建媒体矩阵。 一、…...

Unity地面交互效果——5、角色足迹的制作
大家好,我是阿赵。 之前几篇文章,已经介绍了地面交互的轨迹做法。包括了法线、曲面细分还有顶点偏移。Shader方面的内容已经说完了,不过之前都是用一个球来模拟轨迹,这次来介绍一下,怎样和角色动作结合,…...

Centos8安装出错问题
科普介绍: CentOS 8 是一个基于 Linux 的操作系统,是 Red Hat Enterprise Linux (RHEL)的免费和开源版本。它提供了稳定、安全和可靠的基础设施,适用于服务器和桌面环境。CentOS 8 是 CentOS 系列中最新的版本&#x…...

计算机网络技术
深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网(互联网)与因特网的区别与关系 如图所示࿰…...
当电脑桌面黑屏,而你只有一个鼠标该怎么办(重启方法的平替)
作为一个打工人 电脑是不是黑屏简直是routine了 我们都知道重启能解决一切问题 但是!! 如果你只有一个鼠标 电脑因为种种原因没法重启 该怎么办呢? 别慌 下面的方法非常灵验 1.按住ctrlShiftEsc 调出任务管理器;此项为必须…...

Leetcode2833. 距离原点最远的点
Every day a Leetcode 题目来源:2833. 距离原点最远的点 解法1:贪心 要使得到达的距离原点最远的点,就看 left 和 right 谁大,将 left 和 right 作为矢量相加,再往同方向加上 underline。 答案即为 abs(left - rig…...

chrome 的vue3的开发者devtool不起作用
问题: 刚刚vue2升级到vue3,旧的devtool识别不了vue3数据。 原因: devtool版本过低。升级到最新。 解决: 去github下载vuetool项目代码: GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging…...
Redis数据结构七之listpack和quicklist
本文首发于公众号:Hunter后端 原文链接:Redis数据结构七之listpack和quicklist 本篇笔记介绍 listpack 和 quicklist 两种结构 按照顺序,本来应该先介绍 quicklist 的结构,quicklist 在 7.0 之前的版本是由双向链表和压缩列表构成…...

单词规律问题
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…...

蓝桥杯每日一题2023.11.8
题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set 此处为纯模拟的写法,但使用循环代码会更加简洁。 方法一: #include&…...
高级PHP应用程序漏洞审核技术【一】
高级PHP应用程序漏洞审核技术【一】 目录 高级PHP应用程序漏洞审核技术【一】 本文章向大家介绍高级PHP应用程序漏洞审核技术【一】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参…...

适用于4D毫米波雷达的目标矩形框聚类
目录 一、前言 二、点云聚类分割 三、基于方位搜索L型拟合 四、评价准则之面积最小化 五、评价准则之贴合最大化 六、评价准则之方差最小化 一、前言 对于多线束雷达可以获取目标物体更全面的面貌,在道路中前向或角雷达可能无法获取目标车矩形框但可以扫到两边…...
[模版总结] - 树的基本算法1 - 遍历
树结构定义 一种非线性存储结构,具有存储“一对多”关系的数据元素集合 种类 General Tree TrieB/B 树二叉树 满/完满/完全二叉树 完美BT : 除了叶子结点外所有节点都有两个字节点,每一层都完满填充完全BT: 除最后一层以外其他每一层都完美…...

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)
系统介绍 黑果魏叔11 月 10 日消息,今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新(内部版本号:23C5041e),本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…...

Docker进阶——再次认识docker的概念 Docker的结构 Docker镜像结构 镜像的构建方式
前言 在微服务大量应用的互联网时代,经常能看到docker的身影。作为docker的爱好者(在服务器安装MySQL,Redis。。。我用的都是docker),我也会持续深入学习和认识docker。 本篇博客再次介绍docker的基本概念࿰…...
postgis函数学习
1.特定功能的SQL 转为完整的json,前端调用用json_build_object、jsonb_agg等函数,处理mass_test表 select json_build_object(type,FetureCollection,features,jsonb_agg(st_asgeojson(mt.*)::json)) from mass_test mt获取图形边界范围的坐标 select…...

【Gradle-12】分析so文件和依赖的关系
1、前言 在包大小的占比中,so文件的占比往往是最高的,动辄几兆的大小多一个都会把包大小的指标打爆。 而在各厂商要求对手机CPU ARM架构进行分包适配的情况下,你更需要知道哪些依赖是没有适配v7a/v8a的,这将影响你的APP在应用市场…...

vue项目pdf文件的预览
1.下载 您可以在以下网址下载pdfjsLib:https://github.com/mozilla/pdf.js pdfjsLib是一个开源项目,您可以在GitHub上找到其源代码和相关资源。 2.放置文件位置 3.进入 在index.html引入 <script src"<% BASE_URL %>static/pdfjs-dist/b…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...