当前位置: 首页 > news >正文

【skynet】skynet 服务间通信

写在前面

skynet 服务之间有自己的一套高效通信 API 。本文给出简单的示例。

文章目录

  • 写在前面
  • 准备工作
  • 编写代码
  • 运行结果


准备工作

首先要有一个编译好,而且工作正常的 skynet 。

编写代码

在 skynet/example 目录编写一个配置文件,两个代码文件。

calc.lua 提供数值计算服务。

local skynet = require "skynet"local CALC = {}-- 处理加法
function CALC.add(...)local res = 0for i, v in ipairs{...} dores = res + vendreturn res
end-- 处理减法
function CALC.sub(lhs, rhs)local res = lhs - rhsskynet.error(lhs .. " - " .. rhs .. " = " .. res)
end-- 处理 lua 消息
function lua_dispatch(session, source, cmd, ...)local f = assert(CALC[cmd])skynet.ret(skynet.pack(f(...)))
endskynet.start(function()-- 注册 lua 消息的处理函数skynet.dispatch("lua", lua_dispatch)
end)

主服务 main_test 负责启动 calc ,之后周期发出数值计算请求。

local skynet = require "skynet"
require "skynet.manager"-- 初始化函数
function init()math.randomseed(math.floor(skynet.time()))-- 启动一个服务,并命名local calc_serv = skynet.newservice("calc")skynet.name(".calc", calc_serv)
end-- 服务函数
function task_add()while true do-- 加法local a = math.random(1, 100)local b = math.random(1, 100)local c = math.random(1, 100)local ret = skynet.call(".calc", "lua", "add", a, b, c)skynet.error(a .. " + " .. b .. " + " .. c .. " = " .. ret)-- 睡眠一秒skynet.sleep(300)end
endfunction task_sub()while true do-- 减法local lhs = math.random(1, 100)local rhs = math.random(1, 100)local ret = skynet.send(".calc", "lua", "sub", lhs, rhs)-- 睡眠 1500msskynet.sleep(150)end
end-- 注册初始化函数
skynet.init(init)-- 启动服务
skynet.start(function()skynet.fork(task_add)skynet.fork(task_sub)
end)

配置文件 config_test

-- 启动多少个工作线程
thread = 8-- skynet 工作在单节点模式下
harbor = 0-- skynet 节点的主程序
start = "main_test"-- lua 服务代码所在的位置
luaservice = "./service/?.lua;./examples/?.lua"

运行结果

root@macbook:~/skynet# ./skynet examples/config_test 
[:00000001] LAUNCH logger 
[:00000002] LAUNCH snlua bootstrap
[:00000003] LAUNCH snlua launcher
[:00000004] LAUNCH snlua cdummy
[:00000005] LAUNCH harbor 0 4
[:00000006] LAUNCH snlua datacenterd
[:00000007] LAUNCH snlua service_mgr
[:00000008] LAUNCH snlua main_test
[:00000009] LAUNCH snlua calc
[:00000008] 52 + 77 + 75 = 204
[:00000008] 25 - 56 = -31
...
http://www.lryc.cn/news/127748.html

相关文章:

  • Flink的Standalone部署实战
  • open cv学习 (一)像素的操作
  • 基于C#的消息处理的应用程序 - 开源研究系列文章
  • C语言刷题指南(一)
  • VMware虚拟机Ubuntu无法连接网络的解决方法
  • 基于CentOS 7 部署社区版Haproxy
  • Git和GitHub
  • spring入门基本介绍及注入方式---详细介绍
  • 神经网络基础-神经网络补充概念-24-随机初始化
  • K8S之存储卷
  • 8月17日,每日信息差
  • VBA技术资料MF44:VBA_把数据从剪贴板粘贴到Excel
  • nestjs:nginx反向代理服务器后如何获取请求的ip地址
  • STM32 F103C8T6学习笔记7:双机无线串口通信
  • 开源数据库Mysql_DBA运维实战 (DDL语句)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略
  • 从源代码编译构建Hive3.1.3
  • 探索性测试及基本用例
  • MYSQL 作业三
  • 【深度学习 | 感知器 MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络
  • Kali Linux中常用的渗透测试工具有哪些?
  • SpringBoot案例 调用第三方接口传输数据
  • 第三章,矩阵,08-矩阵的秩及相关性质
  • VS2019 + Qt : setToolTip的提示内容出现乱码
  • PO、BO、VO、DTO、DAO、POJO
  • MySQL— 基础语法大全及操作演示!!!(下)
  • Springboot+vue网上招聘系统
  • 奥威BI数据可视化工具:报表就是平台,随时自助分析
  • iPhone(iPad)安装deb文件
  • 手撕单链表