skynet cluster集群笔记

skynet cluster集群笔记

  • 前言
  • cluster相关方法说明
  • 集群设计方案:
  • 集群中常遇到的问题:
  • 注意事项:

前言

skynet 是一个基于事件驱动的分布式游戏服务器框架,支持构建高性能、高并发的网络程序。在 skynet中,集群是指将多个节点连接在一起,共同协作完成任务的一个系统,一个skynet集群架构中涉及的一些名词如下:

1. 节点: skynet 中的节点是指运行着 skynet 实例的独立服务器。每个节点都有自己的地址和唯一标识符,可以运行不同的服务。节点之间通过网络连接进行通信和协作。
2. 服务: 在 skynet 中,服务是指运行在节点上的具体功能模块。每个服务都有一个唯一的服务名标识符,可以通过该标识符进行访问和通信。服务可以在同一节点上运行,也可以跨节点部署。
3. 集群: skynet 中的集群是指多个节点连接在一起,共同组成一个分布式系统。集群中的节点可以相互通信,共享资源,协同完成任务。集群可以通过网络连接,也可以根据配置在同一台物理机器上运行多个节点。
4. 节点发现: 节点发现是指节点之间相互发现和连接的过程。skynet 提供了节点发现的功能,可以通过配置文件(例如clustername)或者其他方式指定节点的地址和端口,使节点能够找到彼此并建立连接。
5. 服务发现: 集群中的服务发现是指服务之间相互发现和通信的过程。通过服务发现,可以在集群中查找和访问指定的服务,实现分布式系统中的模块化和协作。

cluster相关方法说明

cluster.call: 用于在集群中向指定节点的服务发送请求并等待其回应。它可以用于远程调用其他节点上的服务。

-- 调用名为 "testservice" (也可以是address)的服务的 "hello" 函数,并传递参数 "arg1" 和 "arg2",等待返回结果
local ret = cluster.call("node1", ".testservice", "hello", "arg1", "arg2")
print(ret) 

cluster.send: 用于在集群中向指定节点的服务发送消息,不等待回应。它通常用于异步通信或者发送不需要返回结果的消息。

-- 向名为 "testservice" (也可以是address)的服务发送消息通知,传递参数 "message"
cluster.send("node2", ".testservice", "notify", "message")

cluster.open: 打开节点端口, 通知网关监听节点端口。用于节点发现,这个节点中的服务可以被其他节点调用(前提需要使用cluster.register或cluster.proxy获取到服务句柄)。

-- 在当前节点中打开一个名为 "node1" 的服务,并指定处理函数
cluster.open("node1")

cluster.reload: 用于加载集群节点配置

-- 加载node2,用于集群中的节点发现(node1配置关闭状态)
-- __nowaiting设置true,表示使用cluster.call时是阻塞等待,若设置为false,cluster.call不等待加载完成,而立即返回
-- __nowaiting默认为true
cluster.reload {__nowaiting = true,node1 = false, -- node1 is downnode2 = "127.0.0.1:2529"}

cluster.proxy: 用于在当前节点中创建一个代理对象,代理指定节点上的服务。这样可以方便地通过代理对象调用远程服务。(可以直接使用skynet.call代替使用cluster.call直接调用远端服务地址)

-- 将远程节点node2上的db1服务在本地创建一个代理对象
local proxy = cluster.proxy "node2@db1"   -- cluster.proxy("node2", "@.db1")
-- 使用代理对象调用远程服务的方法
skynet.call(proxy, "lua", ...)

cluster.snax: 用于在当前节点中创建一个 SNAX 服务实例,该实例可以管理指定节点上的 SNAX 服务。

-- 创建一个 SNAX 服务实例,管理名为 "testservice" 的 SNAX 服务,位于 "node1" 节点上
local instance = cluster.snax("node1", "testservice")

cluster.register: 用于将addr注册为在cluster中可见的字符串名字name,如果不传addr,如默认将自身注册为name

-- 在集群中注册当前节点的db1服务
cluster.register(".db1")

cluster.unregister: 用于取消cluster.register的注册。

cluster.unregister(".db1")

cluster.query: 用于查询指定节点上注册的服务名字,返回该名字对应的服务数字地址。若不存在,则抛出error

-- 查询节点node1上的.db1服务的address,并返回其对应的服务地址
local address = cluster.query("node1", ".db1")
print(address)  -- 打印查询结果

源方法使用的注意点:
cluster.call、cluster.send、cluser.proxy接口可以使用@加字符串的方式来调用通过cluster.register注册的服务(官方推荐用法

集群设计方案:

-- TODO(未完待续)

集群中常遇到的问题:

-- TODO (未完待续)

注意事项:

-- TODO(未完待续)

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

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

相关文章

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下,之前写的博客内容。重新捋了一下思路。 目的就是,selenium在需要登录的网站面前,可能就显得有些乏力,因此是不是有一种东西,可以操作它打开我们之前打开过的网站,这样就不用登录了。 …

FPGA TestBench编写学习

1 timescale 1.1 简介 timescale指令用于指定编译器在处理仿真时的时间单位和时间精度。这个指令通常在模块的顶层声明中使用&#xff0c;它告诉编译器和仿真器如何解释代码中的时间值。 timescale指令的语法如下&#xff1a; timescale <time_unit> <time_precis…

并发通信(网络进程线程)

如果为每个客户端创建一个进程&#xff08;或线程&#xff09;&#xff0c;因为linux系统文件标识符最多1024位&#xff0c;是有限的。 所以使用IO复用技术&#xff0c;提高并发程度。 阻塞与非阻塞 阻塞式复用 非阻塞复用 信号驱动IO 在属主进程&#xff08;线程中声明&…

Acwing.503 借教室(二分)

题目 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。 教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海量租借教室的信息&#xff0c;我们…

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除&#xff08;一&#xff09;死锁的检测&#xff08;二&#xff09;死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施&#xff0c;也不采取避免死锁的措施&#xff0c;系统就很可能发生死锁。在这种情况下&#xff0c;…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

C++基础语法和概念

基本语法和数据类型 C 是一种高性能的编程语言&#xff0c;允许程序员对内存管理进行精细控制。了解 C 的基本语法和数据类型是学习这门语言的第一步。以下是一些基础概念的详细介绍&#xff1a; 基本语法 程序结构 一个基础的 C 程序通常包括一个或多个头文件引用、一个 m…

【图(1)】:用邻接矩阵和邻接表实现图

目录 一、图的基本概念 二、图的存储结构 1.邻接矩阵 2.邻接表 一、图的基本概念 注意&#xff1a;概念性的文字不列出太多&#xff0c;记不住也不便于理解 图&#xff08;Graph&#xff09;是由节点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成的…

Vue 监听器:让你的应用实时响应变化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

AI与自动化控制

AI与自动化控制的结合可以实现更加智能和自适应的控制系统。以下是一些AI与自动化控制结合的实例&#xff1a; 智能交通信号灯控制系统&#xff1a; 利用AI分析交通流量数据&#xff0c;实时调整信号灯的时序&#xff0c;以优化交通流动和提高道路通行效率。 工业自动化机器人…

PrintWriter使用

/*** Description PrintWriter使用* * 演示 PrintWriter的使用* author AI福*/ package com.chapter3.demo02;import java.io.PrintWriter;public class Demo07 {public static void main(String[] args) throws Exception{//1.创建打印流PrintWriter pw new PrintWriter(&quo…

CSS居中对齐 (水平垂直居中对齐)

方案一&#xff1a;flex布局【推荐】 给容器添加样式 display: flex; justify-content: center; align-items: center; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" conte…

AcWing 4262. 空调(每日一题)

题目链接&#xff1a;4262. 空调 - AcWing题库 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些&#xff0c;而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏&#xff0c;编号为 1…N&#xff0c;每个牛栏里有一头牛。 第 i…

第三百九十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍显示Snackbar的另外一种方法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1…

完美十进制数——去年天梯校赛

7-4 完美十进制数 对于一个十进制正整数 x&#xff0c;其包含 k 个位&#xff0c;每个数位的数字累加和为 sum 。如果 sum%k0&#xff0c;那么这个十 进制数就是完美的。 例&#xff1a;对于数 12340&#xff0c;包含 5 位&#xff0c;数位累加和为 10&#xff0c;10%50&#x…

算法-贪心-122. 糖果传递

题目 有 n个小朋友坐成一圈&#xff0c;每人有 a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数 n&#xff0c;表示小朋友的个数。 接下来 n 行&#xff0c;每行一个整数…

【组合递归回溯】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归回溯】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;17…

JavaScript实现通过键盘弹钢琴的效果

本片文章通过触发键盘事件来触发对应的音乐&#xff0c;而且给页面添加了渐变的active类名&#xff0c;通过触发不同的鼠标事件&#xff0c;然后active类移动来实现按下钢琴键的视觉效果。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><h…

十堰网站建设公司华想科技具有10年的网站制作经验

2018年已经结束了。 华翔科技收到了很多客户的咨询&#xff0c;他们都有一个共同的问题&#xff1a;建一个网站需要多少钱&#xff1f; 但是&#xff0c;我们都会问&#xff1a;您有什么具体需求吗&#xff1f; 大多数人的答案是否定的&#xff0c;他们只是想打听一下价格。 十…

嵌入式3-11

1、整理思维导图 2、尝试学生结构体数组&#xff0c;完成成员的输入&#xff0c;以成绩为条件完成对学生成员的冒泡排序并输出&#xff08;全部在主函数内完成&#xff09; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.…