em-nodes 0.2.3 → 0.2.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.
- checksums.yaml +7 -0
- data/examples/work_client.rb +22 -0
- data/examples/work_server.rb +25 -0
- data/lib/em-nodes/client/task.rb +11 -4
- data/lib/em-nodes/version.rb +1 -1
- data/spec/task_spec.rb +3 -2
- data/spec/waiter_spec.rb +55 -0
- metadata +72 -90
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fe922a1ce046c59c80d0e07fef0231bf5fa01e61
|
4
|
+
data.tar.gz: 1779d2eae2c85475290ff25dd6c885da0bffc3df
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b654c62869647ee287a5b5e15627020ef2512aafa72db19d18e9eb13e9f8260bbd1959449e5af292fb65e290835b45cab86299edbd1cd743b8e3898805b531d3
|
7
|
+
data.tar.gz: 571c7a47c76818db7fabfd20c106290bdf6237937da0e5e97d6538e34aaefdcaf34313cfd2706dd75ed20fa21e02364a4985f184d5a87f43ae7314037c835fce
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.require
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
l = Logger.new(STDOUT)
|
6
|
+
l.level = Logger::INFO
|
7
|
+
EM::Nodes.logger = l
|
8
|
+
|
9
|
+
class Client < EM::Nodes::DefaultClient
|
10
|
+
def info
|
11
|
+
{ :name => "client" }
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_task(task_id, x)
|
15
|
+
new_x = x + 1
|
16
|
+
send_task_result(task_id, new_x)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
EM.run do
|
21
|
+
Client.connect "/tmp/em_nodes_test.sock"
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.require
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
l = Logger.new(STDOUT)
|
6
|
+
l.level = Logger::INFO
|
7
|
+
EM::Nodes.logger = l
|
8
|
+
|
9
|
+
class Server < EM::Nodes::DefaultServer
|
10
|
+
def on_task_result(new_x)
|
11
|
+
puts new_x
|
12
|
+
EM.stop
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
EM.run do
|
17
|
+
Server.start "/tmp/em_nodes_test.sock"
|
18
|
+
|
19
|
+
Thread.new do
|
20
|
+
puts "waiting for first client"
|
21
|
+
sleep 0.5 while Server.ready_clients.count < 1
|
22
|
+
|
23
|
+
Server.ready_clients.first.send_task(0)
|
24
|
+
end
|
25
|
+
end
|
data/lib/em-nodes/client/task.rb
CHANGED
@@ -3,16 +3,23 @@ class EM::Nodes::Client
|
|
3
3
|
|
4
4
|
def on_task(task_id, data)
|
5
5
|
# redefine me
|
6
|
+
# after task done, should call send_task_result(task_id, result)
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
def on_task_internal(task_id, data)
|
11
|
-
on_task(task_id, data)
|
9
|
+
def tasks
|
10
|
+
@tasks ||= {}
|
12
11
|
end
|
13
12
|
|
14
13
|
def send_task_result(task_id, result)
|
15
14
|
send_task_result_internal(task_id, result)
|
15
|
+
tasks.delete(task_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def on_task_internal(task_id, data)
|
21
|
+
obj = on_task(task_id, data)
|
22
|
+
tasks[task_id] = obj
|
16
23
|
end
|
17
24
|
end
|
18
25
|
end
|
data/lib/em-nodes/version.rb
CHANGED
data/spec/task_spec.rb
CHANGED
@@ -34,9 +34,10 @@ describe "Task spec" do
|
|
34
34
|
client4 = nil
|
35
35
|
EM.run do
|
36
36
|
$server4 = Server4.start('127.0.0.1', 19995)
|
37
|
+
sleep 0.1
|
37
38
|
$client4 = Client4.connect('127.0.0.1', 19995)
|
38
39
|
|
39
|
-
EM.
|
40
|
+
EM.add_timer(0.1) do
|
40
41
|
client4 = Server4.clients.first
|
41
42
|
10.times { |i| client4.send_task(i) }
|
42
43
|
end
|
@@ -52,7 +53,7 @@ describe "Task spec" do
|
|
52
53
|
$server4 = Server4.start('127.0.0.1', 19996)
|
53
54
|
$client4 = Client4.connect('127.0.0.1', 19996)
|
54
55
|
|
55
|
-
EM.
|
56
|
+
EM.add_timer(0.1) do
|
56
57
|
client4 = Server4.clients.first
|
57
58
|
20.times { |i| client4.send_task(i) }
|
58
59
|
end
|
data/spec/waiter_spec.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
class Waiter
|
4
|
+
attr_accessor :time
|
5
|
+
def initialize(conn, task_id)
|
6
|
+
@time = Time.now
|
7
|
+
EM.add_timer(1) { conn.send_task_result(task_id, true) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Client5 < EM::Nodes::Client
|
12
|
+
include TaskFeature
|
13
|
+
|
14
|
+
def on_task(task_id, data)
|
15
|
+
Waiter.new(self, task_id)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
class Server5 < EM::Nodes::Server
|
21
|
+
include TaskFeature
|
22
|
+
|
23
|
+
def on_task_result(res)
|
24
|
+
$server5_results << res
|
25
|
+
EM.stop if $server5_results.size == 10
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "write task object, to prevent GC" do
|
30
|
+
before {
|
31
|
+
$server5_results = []
|
32
|
+
}
|
33
|
+
|
34
|
+
it "should work" do
|
35
|
+
client5 = nil
|
36
|
+
EM.run do
|
37
|
+
$server5 = Server5.start('127.0.0.1', 19997)
|
38
|
+
$client5 = Client5.connect('127.0.0.1', 19997)
|
39
|
+
|
40
|
+
EM.add_timer(0.1) do
|
41
|
+
client5 = Server5.clients.first
|
42
|
+
10.times { |i| client5.send_task(i) }
|
43
|
+
end
|
44
|
+
|
45
|
+
EM.add_timer(0.5) do
|
46
|
+
$server5_results.should be_empty
|
47
|
+
$client5.tasks.size.should == 10
|
48
|
+
$client5.tasks.values.map(&:time).compact.size.should == 10
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
$server5_results.size.should == 10
|
53
|
+
$client5.tasks.size.should == 0
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,92 +1,80 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-nodes
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 3
|
10
|
-
version: 0.2.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.4
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- "'Konstantin Makarchev'"
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
26
|
-
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
32
|
-
requirement: *id001
|
11
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
33
14
|
name: eventmachine
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
34
20
|
type: :runtime
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
21
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 1
|
45
|
-
- 5
|
46
|
-
version: "1.5"
|
47
|
-
requirement: *id002
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
48
28
|
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
49
34
|
type: :development
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
35
|
prerelease: false
|
52
|
-
version_requirements:
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
61
|
-
requirement: *id003
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
62
42
|
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
63
48
|
type: :development
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
49
|
prerelease: false
|
66
|
-
version_requirements:
|
67
|
-
|
68
|
-
requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
69
52
|
- - ">="
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
|
73
|
-
- 0
|
74
|
-
version: "0"
|
75
|
-
requirement: *id004
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
76
56
|
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
77
62
|
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
78
69
|
description: Simple EM client server, and some stuffs
|
79
|
-
email:
|
70
|
+
email:
|
80
71
|
- "'kostya27@gmail.com'"
|
81
72
|
executables: []
|
82
|
-
|
83
73
|
extensions: []
|
84
|
-
|
85
74
|
extra_rdoc_files: []
|
86
|
-
|
87
|
-
|
88
|
-
- .
|
89
|
-
- .rspec
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
90
78
|
- Gemfile
|
91
79
|
- LICENSE.txt
|
92
80
|
- README.md
|
@@ -100,6 +88,8 @@ files:
|
|
100
88
|
- em-nodes.gemspec
|
101
89
|
- examples/chat_client.rb
|
102
90
|
- examples/chat_server.rb
|
91
|
+
- examples/work_client.rb
|
92
|
+
- examples/work_server.rb
|
103
93
|
- lib/em-nodes.rb
|
104
94
|
- lib/em-nodes/adapter.rb
|
105
95
|
- lib/em-nodes/client.rb
|
@@ -119,44 +109,36 @@ files:
|
|
119
109
|
- spec/simple_spec.rb
|
120
110
|
- spec/spec_helper.rb
|
121
111
|
- spec/task_spec.rb
|
122
|
-
|
112
|
+
- spec/waiter_spec.rb
|
123
113
|
homepage: https://github.com/kostya/em-nodes
|
124
|
-
licenses:
|
114
|
+
licenses:
|
125
115
|
- MIT
|
116
|
+
metadata: {}
|
126
117
|
post_install_message:
|
127
118
|
rdoc_options: []
|
128
|
-
|
129
|
-
require_paths:
|
119
|
+
require_paths:
|
130
120
|
- lib
|
131
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
-
|
133
|
-
requirements:
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
134
123
|
- - ">="
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
version: "0"
|
140
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
-
none: false
|
142
|
-
requirements:
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
143
128
|
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
|
146
|
-
segments:
|
147
|
-
- 0
|
148
|
-
version: "0"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
149
131
|
requirements: []
|
150
|
-
|
151
132
|
rubyforge_project:
|
152
|
-
rubygems_version:
|
133
|
+
rubygems_version: 2.2.2
|
153
134
|
signing_key:
|
154
|
-
specification_version:
|
135
|
+
specification_version: 4
|
155
136
|
summary: Simple EM client server, and some stuffs
|
156
|
-
test_files:
|
137
|
+
test_files:
|
157
138
|
- spec/base_spec.rb
|
158
139
|
- spec/hello_spec.rb
|
159
140
|
- spec/simple2_spec.rb
|
160
141
|
- spec/simple_spec.rb
|
161
142
|
- spec/spec_helper.rb
|
162
143
|
- spec/task_spec.rb
|
144
|
+
- spec/waiter_spec.rb
|