Skip to content

Latest commit

 

History

History
185 lines (136 loc) · 3.91 KB

README.ja.adoc

File metadata and controls

185 lines (136 loc) · 3.91 KB

MessageChannel

オブザーバパターンライブラリのひとつ. 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

使い方

Example 1

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

Example 2

require  "message_channel"

Signal.trap( :INT ) do
  exit
end

channel  =  MessageChannel.new

Thread.start do
  while  true
    topic, items  =  channel.listen( "hello", timeout: 0.5 )
    p [topic, items]
  end
end

Thread.start do
  while  true
    channel.notify  "hello", {at: Time.now.to_s}
    sleep  rand
  end
end

sleep

リファレンス

条件を指定して、新たな MessageChannel::* を作成する.

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: 通知アイテム.

通知待機を解除.

MessageChannel::Observer#unlisten( *patterns )
MessageChannel::Druby#unlisten( *patterns )
MessageChannel::Mqtt#unlisten( *patterns )
MessageChannel::Redis#unlisten( *patterns )
  • Result:

    • nil.

  • Parameter:

    • patterns: マスクパターンの配列.

貢献

不具合報告とプルリクエストは GitHub https://github.com/arimay/message_channel まで.

ライセンス

この Gem は、 MITライセンス の条件に基づいてオープンソースとして入手できる.

Copyright (c) ARIMA Yasuhiro <arima.yasuhiro@gmail.com>