skynet的cluster模式官方WIKI介绍
cluster模块把不同IP上的不同进程或者同一IP上的不同进程联系在一起
cluster接口如下
function cluster.call(node, address, ...) 远程调用node中的addr
function cluster.send(node, address, ...) send调用远程node的addr
function cluster.open(port) 本地打开(监听)一个cluster结点,使其能在cluster中的其他结点发现
function cluster.reload(config) 重载远程结点配置表,表中的cluster结点都open过,则可以通讯
function cluster.proxy(node, name) 设置远程结点的代理,使得可以像调用本地RPC一样调用远程结点
function cluster.snax(node, name, address)
function cluster.register(name, addr) 注册一个cluster结点
function cluster.query(node, name) 查找远程结点中注册过的结点是否存在
cluster的创建与调用如下图所示
- 首先要配置一个clustername.lua的文件在所有结点,在所有要发现cluster的结点上执行require 'skynet.cluster'
- 需要告诉其他结节自己在cluster的信息时,需要先cluster.open "nodename" 否则其他的结点无法连接
- 注册需要被访问的service cluster.register "addr"
远程结点可通过使用 cluster.query(nodename, servicename) 来获取该结点已注册的服务
并使用
cluster.call
cluster.send
来进行远程结点调用
技术总结
node如何理解 node可以理解为一台物理机上绑定了某端口的一个skynet进程
addr如何理解 addr可以理解为该node上所有可用的skynet service
必须要准备一份cluster中统一的clusterconfig.lua文件,该文件作用于cluster中每个结点,该文件通过config进行配置,通过reload进行重载,并重定向
cluster.open(port)实际上就是在本地监听了端口,等待其他结点连接过来