celluloid_pubsub 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +73 -3
- data/lib/celluloid_pubsub/initializers/reel_colors.rb +15 -0
- data/lib/celluloid_pubsub/version.rb +1 -1
- data/lib/celluloid_pubsub/web_server.rb +5 -0
- data/lib/celluloid_pubsub.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7488182bb374aeba0db2f121fc0fb17b2c41560b
|
4
|
+
data.tar.gz: 38a24ef56d63549d013f51c76da3a17b3e56edd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f1875bd87ce12992e24b04c68a3316a70f582d24426e37d029d0f8e1a003b8b05a5571228df7e87c1ab1d9c2b68fed6f75dc8071290aafb676c39d3357d81d7
|
7
|
+
data.tar.gz: 0d4832b40b51b555d55b49253002b9f9d155eb1662c257142ecdd1f30cefb2595a15fd6f24a6b4858bf160047be57fec88154dd3f6f501bd98a675b0a83d05ef
|
data/README.md
CHANGED
@@ -8,15 +8,20 @@ Description
|
|
8
8
|
|
9
9
|
CelluloidPubsub is a simple ruby implementation of publish subscribe design patterns using celluloid actors and websockets, using Celluloid::Reel server
|
10
10
|
|
11
|
+
Starting with version 0.4.0, Redis support was added [courtesy of em-hiredis](https://github.com/mloughran/em-hiredis)
|
12
|
+
|
11
13
|
Requirements
|
12
14
|
------------
|
13
15
|
|
14
16
|
1. [Ruby 1.9.x or Ruby 2.x.x](http://www.ruby-lang.org)
|
15
17
|
2. [Celluloid >= 0.16.0](https://github.com/celluloid/celluloid)
|
16
18
|
3. [Celluloid-IO >= 0.16.2](https://github.com/celluloid/celluloid-io)
|
17
|
-
4. [Reel >= 0.
|
18
|
-
5. [
|
19
|
-
6. [
|
19
|
+
4. [Reel >= 0.6.0](https://github.com/celluloid/reel)
|
20
|
+
5. [http >= 1.0.2](https://github.com/httprb/http)
|
21
|
+
6. [Celluloid-websocket-client = 0.0.1](https://github.com/jeremyd/celluloid-websocket-client)
|
22
|
+
7. [ActiveSuport >= 4.2.0](https://rubygems.org/gems/activesupport)
|
23
|
+
8. [em-hiredis >= 0.3.0](https://github.com/mloughran/em-hiredis)
|
24
|
+
9. [json >= 1.8.3](https://github.com/flori/json)
|
20
25
|
|
21
26
|
Compatibility
|
22
27
|
-------------
|
@@ -38,6 +43,71 @@ Add the following to your Gemfile:
|
|
38
43
|
|
39
44
|
Please read [Release Details](https://github.com/bogdanRada/celluloid_pubsub/releases) if you are upgrading. We break backward compatibility between large ticks but you can expect it to be specified at release notes.
|
40
45
|
|
46
|
+
Usage
|
47
|
+
-----
|
48
|
+
|
49
|
+
Creating a websocket server is simple as doing this. This are all the options available with their default values.
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
CelluloidPubsub::WebServer.supervise_as(:web_server,
|
53
|
+
enable_debug: true, # if debug messages should be logged
|
54
|
+
use_redis: false , # if set to true, will instantiate a RedisReactor class to handle each connection, which requires Redis to be available. Otherwise will use a simple Reactor to handle the connections which has no dependencies .
|
55
|
+
log_file_path: "path/to/log_file.log", # The log file where all debugging information will be printed
|
56
|
+
hostname: "0.0.0.0", # the hostname of the server.
|
57
|
+
port: 1234, # the port on which the server will listen for connections
|
58
|
+
path: '/ws', # the relative path used in the URL where connections are allowed to connect
|
59
|
+
spy: false, # whether to spy all internal Websocket connections in order to get more debugging information
|
60
|
+
backlog: 1024 # the number of connections allowed to be connected to the server at a certain time
|
61
|
+
)
|
62
|
+
```
|
63
|
+
|
64
|
+
Creating a client is simple as doing this. If you provide the channel when you initialize the **CelluloidPubsub::Client** it will automatically start the subscription to that channel. But sometimes, you might want to subscribe at a later time, so you can just omit the channel when you initialize the client, and use instead **@client.subscribe('test_channel')**. After the subscription has started, the client must implement the method **on_message** and the **on_close** method (called when client disconnects from the channel). The method **on_message** will receive all incoming messages from the server. You can test if the subscription was successful by doing this **@client.succesfull_subscription?(message)**.
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
class MyAwesomeClient
|
68
|
+
include Celluloid
|
69
|
+
include Celluloid::Logger
|
70
|
+
|
71
|
+
def initialize(options = {})
|
72
|
+
@client = CelluloidPubsub::Client.new({
|
73
|
+
actor: Actor.current,
|
74
|
+
channel: 'test_channel', # the channel to which this client will subscribe to.
|
75
|
+
log_file_path: "path/to/log_file.log", # The log file where all debugging information will be printed
|
76
|
+
hostname: "0.0.0.0", # the hostname of the server.
|
77
|
+
port: 1234,# the port on which the connection will be made to
|
78
|
+
path: '/ws', # the relative path used in the URL where the connection will be connecting to
|
79
|
+
enable_debug: false # if debug messages should be logged
|
80
|
+
}.merge(options))
|
81
|
+
end
|
82
|
+
|
83
|
+
def on_message(message)
|
84
|
+
if @client.succesfull_subscription?(message)
|
85
|
+
puts "subscriber got successful subscription #{message.inspect}"
|
86
|
+
@client.publish('test_channel2', 'data' => ' subscriber got successfull subscription') # the message needs to be a Hash
|
87
|
+
else
|
88
|
+
puts "subscriber got message #{message.inspect}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def on_close(code, reason)
|
93
|
+
puts "websocket connection closed: #{code.inspect}, #{reason.inspect}"
|
94
|
+
terminate
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
```
|
101
|
+
|
102
|
+
The methods available that the **CelluloidPubsub::Client** instance can execute are:
|
103
|
+
|
104
|
+
- subscribe -- subscribe - accepts a string as a channel name
|
105
|
+
- publish - accepts a string as a channel name, and a Hash object
|
106
|
+
- unsubscribe - accepts a string as a channel_name from which the client will unsubscribe from
|
107
|
+
- unsubscribe_clients - accepts a string as a channel_name . This will disconnect all clients that are subscribed to that channel.
|
108
|
+
- unsubscribe_all - This does not have any parameters. Will unsubscribe all clients from all channnels
|
109
|
+
- on_close - This accepts a code and a reason as parameters. This method will be called when the client disconnects from the channel.
|
110
|
+
|
41
111
|
Examples
|
42
112
|
--------
|
43
113
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'reel/spy'
|
2
|
+
Reel::Spy::Colors.class_eval do
|
3
|
+
alias_method :original_colorize, :colorize
|
4
|
+
|
5
|
+
def colorize(n, str)
|
6
|
+
force_utf8_encoding(str)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns utf8 encoding of the msg
|
10
|
+
# @param [String] msg
|
11
|
+
# @return [String] ReturnsReturns utf8 encoding of the msg
|
12
|
+
def force_utf8_encoding(msg)
|
13
|
+
msg.respond_to?(:force_encoding) && msg.encoding.name != 'UTF-8' ? msg.force_encoding('UTF-8') : msg
|
14
|
+
end
|
15
|
+
end
|
@@ -48,6 +48,11 @@ module CelluloidPubsub
|
|
48
48
|
super(hostname, port, { spy: spy, backlog: backlog }, &method(:on_connection))
|
49
49
|
end
|
50
50
|
|
51
|
+
def run
|
52
|
+
@spy = Celluloid.logger
|
53
|
+
loop { async.handle_connection @server.accept }
|
54
|
+
end
|
55
|
+
|
51
56
|
# the method will return true if redis can be used otherwise false
|
52
57
|
#
|
53
58
|
#
|
data/lib/celluloid_pubsub.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid_pubsub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bogdanRada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|
@@ -398,6 +398,7 @@ files:
|
|
398
398
|
- lib/celluloid_pubsub.rb
|
399
399
|
- lib/celluloid_pubsub/client.rb
|
400
400
|
- lib/celluloid_pubsub/helper.rb
|
401
|
+
- lib/celluloid_pubsub/initializers/reel_colors.rb
|
401
402
|
- lib/celluloid_pubsub/reactor.rb
|
402
403
|
- lib/celluloid_pubsub/redis_reactor.rb
|
403
404
|
- lib/celluloid_pubsub/registry.rb
|