msgpack_rpc_server 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +3 -0
- data/VERSION +1 -1
- data/examples/client.rb +8 -0
- data/examples/haskell/compile.sh +3 -0
- data/examples/haskell/ping.hs +9 -0
- data/examples/server.rb +29 -0
- data/lib/msgpack_rpc_server.rb +64 -6
- metadata +9 -36
data/README.rdoc
CHANGED
@@ -8,6 +8,9 @@ Logger library seemed to be incompatible with Daemons library. Therefore logging
|
|
8
8
|
|
9
9
|
Tests are not implemented at the moment. I created this for my own purposes and I'm running this in small-scale production use, but I'm not familiar with the internals of the MessagePack-RPC library, and there may be something that I have not taken into consideration. Feel free to send suggestions for improvement.
|
10
10
|
|
11
|
+
== Installation:
|
12
|
+
|
13
|
+
gem install msgpack_rpc_server
|
11
14
|
|
12
15
|
== Contributing to msgpack_rpc_server
|
13
16
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/examples/client.rb
ADDED
data/examples/server.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require 'msgpack_rpc_server'
|
4
|
+
|
5
|
+
class Handler
|
6
|
+
|
7
|
+
def ping(arg)
|
8
|
+
log "ruby handler received: #{arg}"
|
9
|
+
"message from ruby handler: received '#{arg}'"
|
10
|
+
end
|
11
|
+
|
12
|
+
def close; nil; end
|
13
|
+
end
|
14
|
+
|
15
|
+
config = {:uid => 'nobody',
|
16
|
+
:gid => 'nobody',
|
17
|
+
:listen_ip => '127.0.0.1', # '0.0.0.0' for listening to all incoming connections
|
18
|
+
:port => 9000,
|
19
|
+
:dir => '.',
|
20
|
+
:app_name => 'rpc-server-template',
|
21
|
+
# see http://daemons.rubyforge.org/classes/Daemons.html
|
22
|
+
:ontop => false,
|
23
|
+
:backtrace => true,
|
24
|
+
:dir_mode => :system, # write to /var/run and /var/log
|
25
|
+
:log_output => true
|
26
|
+
}
|
27
|
+
|
28
|
+
MsgPackRPCServer.new(config, Handler.new).run
|
29
|
+
|
data/lib/msgpack_rpc_server.rb
CHANGED
@@ -4,17 +4,65 @@ require 'msgpack/rpc'
|
|
4
4
|
require 'etc'
|
5
5
|
require 'daemons'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# This class is a thin layer over MessagePack::RPC::Server,
|
8
|
+
# which implements privilege dropping and daemonizing.
|
9
|
+
#
|
10
|
+
# Signal handlers call a +close+ method, which the handler class must implement,
|
11
|
+
# and in which e.g. database connections are closed.
|
12
|
+
#
|
13
|
+
# Server example:
|
14
|
+
#
|
15
|
+
# require 'msgpack_rpc_server'
|
16
|
+
#
|
17
|
+
# msgpack_config = {:uid => 'nobody',
|
18
|
+
# :gid => 'nobody',
|
19
|
+
# :listen_ip => '127.0.0.1',
|
20
|
+
# :port => 12345,
|
21
|
+
# :dir => '.',
|
22
|
+
# :app_name => 'test_server',
|
23
|
+
# :ontop => false,
|
24
|
+
# :backtrace => true,
|
25
|
+
# :dir_mode => :script,
|
26
|
+
# :log_output => true }
|
27
|
+
#
|
28
|
+
# class Handler
|
29
|
+
# def ping(arg); "pong received #{arg}"; end
|
30
|
+
# def close; nil; end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# MsgPackRPCServer.new(msgpack_config, Handler.new).run
|
34
|
+
#
|
35
|
+
# Client example:
|
36
|
+
#
|
37
|
+
# require 'msgpack/rpc'
|
38
|
+
#
|
39
|
+
# c = MessagePack::RPC::Client.new('127.0.0.1', 12345)
|
40
|
+
# puts c.call(:ping, "hello")
|
41
|
+
#
|
42
|
+
# MessagePack documentation: http://msgpack.org/
|
43
|
+
#
|
44
|
+
# Daemons documentation: http://daemons.rubyforge.org/
|
10
45
|
|
11
46
|
class MsgPackRPCServer
|
12
47
|
|
48
|
+
# Returns a new instance. The first parameter is a hash containing configuration
|
49
|
+
# parameters.
|
50
|
+
#
|
51
|
+
# Refer to the example and the Daemons library documentation for the format and meanings of
|
52
|
+
# configuration parameters.
|
53
|
+
#
|
54
|
+
# The other parameter is an instance of the handler class.
|
55
|
+
|
13
56
|
def initialize(config, handler)
|
14
57
|
@config = config
|
15
58
|
@handler = handler
|
16
59
|
end
|
17
60
|
|
61
|
+
# Logger library seemed to be incompatible with Daemons library, which is why logging is implemented in this very simple way for now.
|
62
|
+
|
63
|
+
def log(msg); puts "#{Time.new.to_s}: #{msg}"; end
|
64
|
+
|
65
|
+
# Daemonizes this process according to the configuration parameters given to +new+.
|
18
66
|
def daemonize
|
19
67
|
Daemons.daemonize({:ontop => @config[:ontop], :backtrace => @config[:backtrace], :dir => @config[:dir],
|
20
68
|
:app_name => @config[:app_name], :dir_mode => @config[:dir_mode],
|
@@ -22,6 +70,7 @@ class MsgPackRPCServer
|
|
22
70
|
log "daemonized."
|
23
71
|
end
|
24
72
|
|
73
|
+
# Drops privileges according to the configuration parameters given to +new+.
|
25
74
|
def drop_privileges
|
26
75
|
gid = Etc::getgrnam(@config[:gid])[:gid]
|
27
76
|
uid = Etc::getpwnam(@config[:uid])[:uid]
|
@@ -30,14 +79,23 @@ class MsgPackRPCServer
|
|
30
79
|
log "privileges dropped."
|
31
80
|
end
|
32
81
|
|
33
|
-
|
82
|
+
# Calls the +close+ method of the handler class.
|
83
|
+
def close
|
84
|
+
@handler.close
|
85
|
+
log "handler closed."
|
86
|
+
end
|
87
|
+
|
88
|
+
private :daemonize, :drop_privileges, :log, :close
|
34
89
|
|
90
|
+
# Starts the server after daemonizing and privilege dropping.
|
91
|
+
# Sets signal handlers for INT and TERM.
|
92
|
+
|
35
93
|
def run
|
36
94
|
daemonize
|
37
95
|
drop_privileges
|
38
96
|
|
39
|
-
Signal.trap('INT') { log "received INT signal; exiting."; exit }
|
40
|
-
Signal.trap('TERM') { log "received TERM signal; exiting."; exit }
|
97
|
+
Signal.trap('INT') { log "received INT signal; exiting."; close; exit }
|
98
|
+
Signal.trap('TERM') { log "received TERM signal; exiting."; close; exit }
|
41
99
|
|
42
100
|
svr = MessagePack::RPC::Server.new
|
43
101
|
svr.listen @config[:listen_ip], @config[:port], @handler
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack_rpc_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
segments_generated: true
|
10
|
-
version: 0.1.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.1
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- opiskelijarekisteri-devel
|
@@ -15,8 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
13
|
+
date: 2011-11-30 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
22
16
|
name: msgpack-rpc
|
@@ -25,11 +19,6 @@ dependencies:
|
|
25
19
|
requirements:
|
26
20
|
- - ">="
|
27
21
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
- 4
|
31
|
-
- 5
|
32
|
-
segments_generated: true
|
33
22
|
version: 0.4.5
|
34
23
|
type: :runtime
|
35
24
|
prerelease: false
|
@@ -41,11 +30,6 @@ dependencies:
|
|
41
30
|
requirements:
|
42
31
|
- - ">="
|
43
32
|
- !ruby/object:Gem::Version
|
44
|
-
segments:
|
45
|
-
- 1
|
46
|
-
- 1
|
47
|
-
- 4
|
48
|
-
segments_generated: true
|
49
33
|
version: 1.1.4
|
50
34
|
type: :runtime
|
51
35
|
prerelease: false
|
@@ -57,11 +41,6 @@ dependencies:
|
|
57
41
|
requirements:
|
58
42
|
- - ~>
|
59
43
|
- !ruby/object:Gem::Version
|
60
|
-
segments:
|
61
|
-
- 1
|
62
|
-
- 0
|
63
|
-
- 0
|
64
|
-
segments_generated: true
|
65
44
|
version: 1.0.0
|
66
45
|
type: :development
|
67
46
|
prerelease: false
|
@@ -73,11 +52,6 @@ dependencies:
|
|
73
52
|
requirements:
|
74
53
|
- - ~>
|
75
54
|
- !ruby/object:Gem::Version
|
76
|
-
segments:
|
77
|
-
- 1
|
78
|
-
- 6
|
79
|
-
- 4
|
80
|
-
segments_generated: true
|
81
55
|
version: 1.6.4
|
82
56
|
type: :development
|
83
57
|
prerelease: false
|
@@ -98,10 +72,13 @@ files:
|
|
98
72
|
- README.rdoc
|
99
73
|
- Rakefile
|
100
74
|
- VERSION
|
75
|
+
- examples/client.rb
|
76
|
+
- examples/haskell/compile.sh
|
77
|
+
- examples/haskell/ping.hs
|
78
|
+
- examples/server.rb
|
101
79
|
- lib/msgpack_rpc_server.rb
|
102
80
|
- test/helper.rb
|
103
81
|
- test/test_msgpack_rpc_server.rb
|
104
|
-
has_rdoc: true
|
105
82
|
homepage: http://github.com/opiskelijarekisteri-devel/msgpack_rpc_server
|
106
83
|
licenses:
|
107
84
|
- GPLv3
|
@@ -115,24 +92,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
92
|
requirements:
|
116
93
|
- - ">="
|
117
94
|
- !ruby/object:Gem::Version
|
118
|
-
hash:
|
95
|
+
hash: 2202355589262301225
|
119
96
|
segments:
|
120
97
|
- 0
|
121
|
-
segments_generated: true
|
122
98
|
version: "0"
|
123
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
100
|
none: false
|
125
101
|
requirements:
|
126
102
|
- - ">="
|
127
103
|
- !ruby/object:Gem::Version
|
128
|
-
segments:
|
129
|
-
- 0
|
130
|
-
segments_generated: true
|
131
104
|
version: "0"
|
132
105
|
requirements: []
|
133
106
|
|
134
107
|
rubyforge_project:
|
135
|
-
rubygems_version: 1.
|
108
|
+
rubygems_version: 1.8.11
|
136
109
|
signing_key:
|
137
110
|
specification_version: 3
|
138
111
|
summary: MessagePack-RPC server template.
|