Elixir: Syn,一个分布式进程注册表的例子

发布时间:2019-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Elixir: Syn,一个分布式进程注册表的例子脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

文章 Elixir: Syn,一个分布式进程注册表和进程组管理器 阐述了如何使用 Mnesia仅内存表来运行分布式系统全局进程注册简介, 本文用一个实际的例子演示如何使用 Syn 进行分布式全局进程注册和查询

本文以一个基于OpenCV的图形处理项目为例子演示怎么进行全局进程注册和查询.
Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器
https://github.com/developerworks/opencv_thumbnail_server

首先启动两个节点并连接

iex --name node1@192.168.8.104 -S mix
iex --name node2@192.168.8.104 -S mix

node2@192.168.8.104 终端中输入:

Node.connect :"node1@192.168.8.104"

运行 :syn.start 启动 syn 应用程序, 执行 :syn.init 初始化分布式 Mnesia 表

Elixir: Syn,一个分布式进程注册表的例子

查看 Mnesia 数据库的信息

Elixir: Syn,一个分布式进程注册表的例子

其中 running db nodes 指出了 Mnesia 集群包含那些节点, ram_copies 指出了, 哪些内存表分布在哪些节点上, 这里为 schema, syn_registry_table, 和 syn_groups_table

node1 上注册进程, 在 node2 上查询:

iex(node1@192.168.8.104)2> worker = :poolboy.checkout(:opencv_thumbnail_server_pool)
iex(node1@192.168.8.104)3> :syn.register "process_1234567890", worker
:ok
iex(node1@192.168.8.104)4> :syn.find_by_key "process_1234567890"
#PID<0.293.0>

切换到 node2 执行查询

iex(node2@192.168.8.104)9> :syn.find_by_key "process_1234567890"
#PID<16898.293.0>

返回的 #PID<16898.293.0> 说明了这个进程是一个非本地进程.

把一个进程添加到一个组

iex(node2@192.168.8.104)11> pid = :syn.find_by_key "process_1234567890"
#PID<16898.293.0>
iex(node2@192.168.8.104)12> :syn.join "group1", pid                    
:ok

获取组 group1 的所有进程

iex(node2@192.168.8.104)13> :syn.get_members "group1"
[#PID<16898.293.0>]

从组中删除一个进程

iex(node2@192.168.8.104)14> :syn.leave "group1", pid
:ok
iex(node2@192.168.8.104)15> :syn.get_members "group1"
[]

脚本宝典总结

以上是脚本宝典为你收集整理的Elixir: Syn,一个分布式进程注册表的例子全部内容,希望文章能够帮你解决Elixir: Syn,一个分布式进程注册表的例子所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: