オブザーバパターンライブラリのひとつ. Observable, DRb, MQTT, Redis を用いる.
-
スレッドベースのオブザーバパターンライブラリ.
-
Obserbable, DRb, MQTT, Redis のラッパーとして実装.
-
Observer はソケットを使わずに通信できる.
-
DRb は外部サーバを使わずにプロセス間通信できる.
-
MQTT と Redis は通信できるアプリを他言語でも作成できる.
-
トピックは文字列として、データは JSON 化した文字列として配信する.
アプリの Gemfile にこの行を追加
gem 'message_channel'
それから実行
$ bundle install
または次のように手動で導入
$ gem install message_channel or $ gem install -l message_channel-x.x.x.gem
require "message_channel"
Signal.trap( :INT ) do
exit
end
channel = MessageChannel.new
channel.listen( "hello" ) do |topic, **items|
p [topic, items]
end
while true
channel.notify "hello", {at: Time.now.to_s}
sleep 1
end
MessageChannel.new( uri = nil, type: nil, host: nil, port: nil, db: nil )
-
Result:
-
MessageChannel::* object.
-
-
Parameter:
-
uri: scheme://host:port/params (default: nil)
-
"observer"
-
"druby://127.0.0.1:8787"
-
"mqtt://127.0.0.1:1883"
-
"redis://127.0.0.1:6379/0"
-
-
type: Channel type. (default: "observer")
-
"observer"
-
"druby"
-
"mqtt"
-
"redis"
-
-
host: サービスホスト. (default: nil)
-
port: サービスポート. (default: nil)
-
db: データベース. (default: nil)
-
MessageChannel::Observer#notify( topic, **items )
MessageChannel::Druby#notify( topic, **items )
MessageChannel::Mqtt#notify( topic, **items )
MessageChannel::Redis#notify( topic, **items )
-
Result:
-
nil.
-
-
Parameter:
-
topic: 通知トピック.
-
items: 通知アイテム.
-
MessageChannel::Observer#listen( *patterns, timeout: nil, &block )
MessageChannel::Druby#listen( *patterns, timeout: nil, &block )
MessageChannel::Mqtt#listen( *patterns, timeout: nil, &block )
MessageChannel::Redis#listen( *patterns, timeout: nil, &block )
-
ブロック引数あり: (非同期)
-
Result:
-
nil.
-
-
Parameter:
-
patterns: マスクパターンの配列.
-
-
-
ブロック引数なし: (待機)
-
Result: タイムアウトなら nil を返す.
-
topic: 通知トピック.
-
items: 通知アイテム.
-
-
Parameter:
-
patterns: マスクパターンの配列.
-
timeout: nil または待機秒数.
-
-
Block Parameter:
-
topic: 通知トピック.
-
items: 通知アイテム.
-
-
不具合報告とプルリクエストは GitHub https://github.com/arimay/message_channel まで.
この Gem は、 MITライセンス の条件に基づいてオープンソースとして入手できる.
Copyright (c) ARIMA Yasuhiro <arima.yasuhiro@gmail.com>