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 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.0
1
+ 0.1.1
@@ -0,0 +1,8 @@
1
+ #/bin/env ruby
2
+
3
+ require 'msgpack/rpc'
4
+
5
+ sp = MessagePack::RPC::SessionPool.new
6
+ client = sp.get_session('127.0.0.1', 9000)
7
+ puts client.call(:ping, "ruby client calling.")
8
+
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ #cabal install msgpack-rpc
3
+ ghc --make ping.hs
@@ -0,0 +1,9 @@
1
+ import Network.MessagePackRpc.Client
2
+
3
+ ping :: RpcMethod (String -> IO String)
4
+ ping = method "ping"
5
+
6
+ main = do
7
+ conn <- connect "127.0.0.1" 9000
8
+ print =<< ping conn "haskell client calling."
9
+
@@ -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
+
@@ -4,17 +4,65 @@ require 'msgpack/rpc'
4
4
  require 'etc'
5
5
  require 'daemons'
6
6
 
7
-
8
- def log(msg); puts "#{Time.new.to_s}: #{msg}"; end
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
- private :daemonize, :drop_privileges, :log
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: false
5
- segments:
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-10-04 00:00:00 +03:00
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: 4066221359959899943
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.3.7
108
+ rubygems_version: 1.8.11
136
109
  signing_key:
137
110
  specification_version: 3
138
111
  summary: MessagePack-RPC server template.