skynet学习笔记03— 服务

2023-11-12 01:20
文章标签 服务 学习 笔记 03 skynet

本文主要是介绍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— 服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394134

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题