redisrpc 0.3.3 → 0.3.4
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.
- data/lib/redisrpc.rb +20 -10
- metadata +5 -5
data/lib/redisrpc.rb
CHANGED
@@ -24,6 +24,10 @@ module RedisRPC
|
|
24
24
|
end
|
25
25
|
|
26
26
|
|
27
|
+
class TimeoutException<Exception
|
28
|
+
end
|
29
|
+
|
30
|
+
|
27
31
|
class FunctionCall
|
28
32
|
|
29
33
|
def initialize(args={})
|
@@ -45,22 +49,26 @@ module RedisRPC
|
|
45
49
|
|
46
50
|
class Client
|
47
51
|
|
48
|
-
def initialize(redis_server,
|
52
|
+
def initialize(redis_server, message_queue, timeout=0)
|
49
53
|
@redis_server = redis_server
|
50
|
-
@
|
54
|
+
@message_queue = message_queue
|
55
|
+
@timeout = timeout
|
51
56
|
end
|
52
57
|
|
53
58
|
def method_missing(sym, *args, &block)
|
54
59
|
function_call = {'name' => sym.to_s, 'args' => args}
|
55
|
-
response_queue = @
|
60
|
+
response_queue = @message_queue + ':rpc:' + rand_string
|
56
61
|
rpc_request = {'function_call' => function_call, 'response_queue' => response_queue}
|
57
62
|
message = JSON.generate rpc_request
|
58
63
|
if $DEBUG
|
59
64
|
$stderr.puts 'RPC Request: ' + message
|
60
65
|
end
|
61
|
-
@redis_server.rpush @
|
62
|
-
|
63
|
-
|
66
|
+
@redis_server.rpush @message_queue, message
|
67
|
+
result = @redis_server.blpop response_queue, @timeout
|
68
|
+
if result.nil?
|
69
|
+
raise TimeoutException
|
70
|
+
end
|
71
|
+
message_queue, message = result
|
64
72
|
if $DEBUG
|
65
73
|
if message_queue != response_queue
|
66
74
|
fail 'assertion failed'
|
@@ -91,17 +99,19 @@ module RedisRPC
|
|
91
99
|
|
92
100
|
class Server
|
93
101
|
|
94
|
-
def initialize(redis_server,
|
102
|
+
def initialize(redis_server, message_queue, local_object)
|
95
103
|
@redis_server = redis_server
|
96
|
-
@
|
104
|
+
@message_queue = message_queue
|
97
105
|
@local_object = local_object
|
98
106
|
end
|
99
107
|
|
100
108
|
def run
|
109
|
+
# Flush the message queue.
|
110
|
+
@redis_server.del @message_queue
|
101
111
|
loop do
|
102
|
-
message_queue, message = @redis_server.blpop @
|
112
|
+
message_queue, message = @redis_server.blpop @message_queue, 0
|
103
113
|
if $DEBUG
|
104
|
-
fail 'assertion failed' if message_queue != @
|
114
|
+
fail 'assertion failed' if message_queue != @message_queue
|
105
115
|
$stderr.puts 'RPC Request: ' + message
|
106
116
|
end
|
107
117
|
rpc_request = JSON.parse(message)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redisrpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &2151801000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - <
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2151801000
|
25
25
|
description: ! 'RedisRPC is the easiest to use RPC library in the world. (No small
|
26
26
|
claim!) It
|
27
27
|
|
@@ -43,7 +43,7 @@ description: ! 'RedisRPC is the easiest to use RPC library in the world. (No sma
|
|
43
43
|
|
44
44
|
Many other RPC mechanisms are either programming language specific (e.g.
|
45
45
|
|
46
|
-
|
46
|
+
Java RMI) or require boiler-plate code for explicit typing (e.g. Thrift).
|
47
47
|
|
48
48
|
RedisRPC was designed to be extremely easy to use by eliminating boiler-plate
|
49
49
|
|