msgpack_rpc_server 0.1.0 → 0.1.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.
- 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.
|