anycable 0.5.2 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +166 -2
- data/MIT-LICENSE +1 -1
- data/README.md +19 -60
- data/bin/anycable +13 -0
- data/bin/anycabled +30 -0
- data/lib/anycable.rb +69 -18
- data/lib/anycable/broadcast_adapters.rb +33 -0
- data/lib/anycable/broadcast_adapters/redis.rb +42 -0
- data/lib/anycable/cli.rb +329 -0
- data/lib/anycable/config.rb +93 -17
- data/lib/anycable/exceptions_handling.rb +37 -0
- data/lib/anycable/health_server.rb +52 -31
- data/lib/anycable/middleware.rb +19 -0
- data/lib/anycable/middleware_chain.rb +58 -0
- data/lib/anycable/rpc/rpc_pb.rb +1 -1
- data/lib/anycable/rpc/rpc_services_pb.rb +1 -1
- data/lib/anycable/rpc_handler.rb +77 -32
- data/lib/anycable/server.rb +132 -39
- data/lib/anycable/socket.rb +1 -1
- data/lib/anycable/version.rb +2 -2
- metadata +34 -59
- data/.gitignore +0 -40
- data/.hound.yml +0 -3
- data/.rubocop.yml +0 -71
- data/.travis.yml +0 -13
- data/Gemfile +0 -8
- data/Makefile +0 -5
- data/PITCHME.md +0 -139
- data/PITCHME.yaml +0 -1
- data/Rakefile +0 -8
- data/anycable.gemspec +0 -32
- data/assets/Memory3.png +0 -0
- data/assets/Memory5.png +0 -0
- data/assets/RTT3.png +0 -0
- data/assets/RTT5.png +0 -0
- data/assets/Scheme1.png +0 -0
- data/assets/Scheme2.png +0 -0
- data/assets/cpu_chart.gif +0 -0
- data/assets/cpu_chart2.gif +0 -0
- data/assets/evlms.png +0 -0
- data/benchmarks/.gitignore +0 -1
- data/benchmarks/2017-02-12.md +0 -308
- data/benchmarks/2018-03-04.md +0 -192
- data/benchmarks/2018-05-27-rpc-bench.md +0 -57
- data/benchmarks/HowTo.md +0 -23
- data/benchmarks/ansible.cfg +0 -9
- data/benchmarks/benchmark.yml +0 -67
- data/benchmarks/hosts +0 -5
- data/benchmarks/servers.yml +0 -36
- data/circle.yml +0 -8
- data/etc/bug_report_template.rb +0 -76
- data/lib/anycable/handler/exceptions_handling.rb +0 -43
- data/lib/anycable/pubsub.rb +0 -26
- data/protos/rpc.proto +0 -55
data/lib/anycable/socket.rb
CHANGED
data/lib/anycable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anycable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -16,60 +16,54 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.1.1
|
19
|
+
version: 1.4.2
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.1.1
|
26
|
+
version: 1.4.2
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: grpc
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
33
|
+
version: '1.17'
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1.
|
40
|
+
version: '1.17'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: redis
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
54
|
-
type: :
|
47
|
+
version: '4.0'
|
48
|
+
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
54
|
+
version: '4.0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: bundler
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
61
|
version: '1'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
68
|
version: '1'
|
75
69
|
- !ruby/object:Gem::Dependency
|
@@ -120,14 +114,14 @@ dependencies:
|
|
120
114
|
requirements:
|
121
115
|
- - "~>"
|
122
116
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
117
|
+
version: 0.68.0
|
124
118
|
type: :development
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
122
|
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
124
|
+
version: 0.68.0
|
131
125
|
- !ruby/object:Gem::Dependency
|
132
126
|
name: simplecov
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,64 +150,46 @@ dependencies:
|
|
156
150
|
- - ">="
|
157
151
|
- !ruby/object:Gem::Version
|
158
152
|
version: '0'
|
159
|
-
description:
|
153
|
+
description: AnyCable is a polyglot replacement for ActionCable-compatible servers
|
160
154
|
email:
|
161
155
|
- dementiev.vm@gmail.com
|
162
|
-
executables:
|
156
|
+
executables:
|
157
|
+
- anycable
|
158
|
+
- anycabled
|
163
159
|
extensions: []
|
164
160
|
extra_rdoc_files: []
|
165
161
|
files:
|
166
|
-
- ".gitignore"
|
167
|
-
- ".hound.yml"
|
168
|
-
- ".rubocop.yml"
|
169
|
-
- ".travis.yml"
|
170
162
|
- CHANGELOG.md
|
171
|
-
- Gemfile
|
172
163
|
- MIT-LICENSE
|
173
|
-
- Makefile
|
174
|
-
- PITCHME.md
|
175
|
-
- PITCHME.yaml
|
176
164
|
- README.md
|
177
|
-
-
|
178
|
-
-
|
179
|
-
- assets/Memory3.png
|
180
|
-
- assets/Memory5.png
|
181
|
-
- assets/RTT3.png
|
182
|
-
- assets/RTT5.png
|
183
|
-
- assets/Scheme1.png
|
184
|
-
- assets/Scheme2.png
|
185
|
-
- assets/cpu_chart.gif
|
186
|
-
- assets/cpu_chart2.gif
|
187
|
-
- assets/evlms.png
|
188
|
-
- benchmarks/.gitignore
|
189
|
-
- benchmarks/2017-02-12.md
|
190
|
-
- benchmarks/2018-03-04.md
|
191
|
-
- benchmarks/2018-05-27-rpc-bench.md
|
192
|
-
- benchmarks/HowTo.md
|
193
|
-
- benchmarks/ansible.cfg
|
194
|
-
- benchmarks/benchmark.yml
|
195
|
-
- benchmarks/hosts
|
196
|
-
- benchmarks/servers.yml
|
165
|
+
- bin/anycable
|
166
|
+
- bin/anycabled
|
197
167
|
- bin/console
|
198
168
|
- bin/setup
|
199
|
-
- circle.yml
|
200
|
-
- etc/bug_report_template.rb
|
201
169
|
- lib/anycable.rb
|
170
|
+
- lib/anycable/broadcast_adapters.rb
|
171
|
+
- lib/anycable/broadcast_adapters/redis.rb
|
172
|
+
- lib/anycable/cli.rb
|
202
173
|
- lib/anycable/config.rb
|
203
|
-
- lib/anycable/
|
174
|
+
- lib/anycable/exceptions_handling.rb
|
204
175
|
- lib/anycable/health_server.rb
|
205
|
-
- lib/anycable/
|
176
|
+
- lib/anycable/middleware.rb
|
177
|
+
- lib/anycable/middleware_chain.rb
|
206
178
|
- lib/anycable/rpc/rpc_pb.rb
|
207
179
|
- lib/anycable/rpc/rpc_services_pb.rb
|
208
180
|
- lib/anycable/rpc_handler.rb
|
209
181
|
- lib/anycable/server.rb
|
210
182
|
- lib/anycable/socket.rb
|
211
183
|
- lib/anycable/version.rb
|
212
|
-
- protos/rpc.proto
|
213
184
|
homepage: http://github.com/anycable/anycable
|
214
185
|
licenses:
|
215
186
|
- MIT
|
216
|
-
metadata:
|
187
|
+
metadata:
|
188
|
+
bug_tracker_uri: http://github.com/anycable/anycable/issues
|
189
|
+
changelog_uri: https://github.com/anycable/anycable/blob/master/CHANGELOG.md
|
190
|
+
documentation_uri: https://docs.anycable.io/
|
191
|
+
homepage_uri: https://anycable.io/
|
192
|
+
source_code_uri: http://github.com/anycable/anycable
|
217
193
|
post_install_message:
|
218
194
|
rdoc_options: []
|
219
195
|
require_paths:
|
@@ -222,16 +198,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
222
198
|
requirements:
|
223
199
|
- - ">="
|
224
200
|
- !ruby/object:Gem::Version
|
225
|
-
version:
|
201
|
+
version: 2.4.0
|
226
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
203
|
requirements:
|
228
204
|
- - ">="
|
229
205
|
- !ruby/object:Gem::Version
|
230
206
|
version: '0'
|
231
207
|
requirements: []
|
232
|
-
|
233
|
-
rubygems_version: 2.7.6
|
208
|
+
rubygems_version: 3.0.3
|
234
209
|
signing_key:
|
235
210
|
specification_version: 4
|
236
|
-
summary:
|
211
|
+
summary: AnyCable is a polyglot replacement for ActionCable-compatible servers
|
237
212
|
test_files: []
|
data/.gitignore
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# Numerous always-ignore extensions
|
2
|
-
*.diff
|
3
|
-
*.err
|
4
|
-
*.orig
|
5
|
-
*.log
|
6
|
-
*.rej
|
7
|
-
*.swo
|
8
|
-
*.swp
|
9
|
-
*.vi
|
10
|
-
*~
|
11
|
-
*.sass-cache
|
12
|
-
*.iml
|
13
|
-
.idea/
|
14
|
-
|
15
|
-
# Sublime
|
16
|
-
*.sublime-project
|
17
|
-
*.sublime-workspace
|
18
|
-
|
19
|
-
# OS or Editor folders
|
20
|
-
.DS_Store
|
21
|
-
.cache
|
22
|
-
.project
|
23
|
-
.settings
|
24
|
-
.tmproj
|
25
|
-
Thumbs.db
|
26
|
-
|
27
|
-
.bundle/
|
28
|
-
log/*.log
|
29
|
-
*.gz
|
30
|
-
pkg/
|
31
|
-
spec/dummy/db/*.sqlite3
|
32
|
-
spec/dummy/db/*.sqlite3-journal
|
33
|
-
spec/dummy/tmp/
|
34
|
-
|
35
|
-
Gemfile.lock
|
36
|
-
Gemfile.local
|
37
|
-
.rspec
|
38
|
-
*.gem
|
39
|
-
tmp/
|
40
|
-
coverage/
|
data/.hound.yml
DELETED
data/.rubocop.yml
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
# Include gemspec and Rakefile
|
3
|
-
Include:
|
4
|
-
- 'lib/**/*.rb'
|
5
|
-
- 'lib/**/*.rake'
|
6
|
-
- 'spec/**/*.rb'
|
7
|
-
Exclude:
|
8
|
-
- 'bin/**/*'
|
9
|
-
- 'spec/dummy/**/*'
|
10
|
-
- 'tmp/**/*'
|
11
|
-
- 'bench/**/*'
|
12
|
-
- 'vendor/**/*'
|
13
|
-
- 'lib/anycable/rpc/**/*'
|
14
|
-
- 'gemfiles/**/*'
|
15
|
-
- 'Gemfile'
|
16
|
-
- 'Rakefile'
|
17
|
-
- '*.gemspec'
|
18
|
-
DisplayCopNames: true
|
19
|
-
StyleGuideCopsOnly: false
|
20
|
-
TargetRubyVersion: 2.4
|
21
|
-
|
22
|
-
Naming/AccessorMethodName:
|
23
|
-
Enabled: false
|
24
|
-
|
25
|
-
Naming/UncommunicativeMethodParamName:
|
26
|
-
Enabled: false
|
27
|
-
|
28
|
-
Style/PercentLiteralDelimiters:
|
29
|
-
Enabled: false
|
30
|
-
|
31
|
-
Style/TrivialAccessors:
|
32
|
-
Enabled: false
|
33
|
-
|
34
|
-
Style/Documentation:
|
35
|
-
Exclude:
|
36
|
-
- 'spec/**/*.rb'
|
37
|
-
|
38
|
-
Style/StringLiterals:
|
39
|
-
Enabled: false
|
40
|
-
|
41
|
-
Layout/SpaceInsideStringInterpolation:
|
42
|
-
EnforcedStyle: no_space
|
43
|
-
|
44
|
-
Style/BlockDelimiters:
|
45
|
-
Exclude:
|
46
|
-
- 'spec/**/*.rb'
|
47
|
-
|
48
|
-
Lint/AmbiguousRegexpLiteral:
|
49
|
-
Enabled: false
|
50
|
-
|
51
|
-
Lint/MissingCopEnableDirective:
|
52
|
-
Enabled: false
|
53
|
-
|
54
|
-
Metrics/MethodLength:
|
55
|
-
Exclude:
|
56
|
-
- 'spec/**/*.rb'
|
57
|
-
|
58
|
-
Metrics/LineLength:
|
59
|
-
Max: 100
|
60
|
-
Exclude:
|
61
|
-
- 'spec/**/*.rb'
|
62
|
-
|
63
|
-
Metrics/BlockLength:
|
64
|
-
Exclude:
|
65
|
-
- 'spec/**/*.rb'
|
66
|
-
|
67
|
-
Rails/Date:
|
68
|
-
Enabled: false
|
69
|
-
|
70
|
-
Rails/TimeZone:
|
71
|
-
Enabled: false
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Makefile
DELETED
data/PITCHME.md
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
#HSLIDE
|
2
|
-
|
3
|
-
## AnyCable
|
4
|
-
### A polyglot replacement for <span style="color:#e49436">ActionCable</span> server
|
5
|
-
|
6
|
-
#HSLIDE
|
7
|
-
|
8
|
-
## ActionCable
|
9
|
-
|
10
|
-
#### Easy to use <!-- .element: class="fragment" -->
|
11
|
-
|
12
|
-
#### Allows you to access business logic <!-- .element: class="fragment" -->
|
13
|
-
|
14
|
-
#### Has JS client that just works <!-- .element: class="fragment" -->
|
15
|
-
|
16
|
-
#HSLIDE
|
17
|
-
|
18
|
-
## ActionCable
|
19
|
-
|
20
|
-
### is good for [designing live features](http://weblog.rubyonrails.org/2016/6/30/Rails-5-0-final/)
|
21
|
-
|
22
|
-
|
23
|
-
#HSLIDE
|
24
|
-
|
25
|
-
## But...
|
26
|
-
### is it ready for <span style="color:#e49436">production</span>?
|
27
|
-
|
28
|
-
#HSLIDE
|
29
|
-
|
30
|
-
## Benchmarks
|
31
|
-
|
32
|
-
#### Unfortunately, <span style="color:#e49436">ActionCable</span> leaves much to be desired
|
33
|
-
|
34
|
-
<span style="font-size:0.6em; color:gray">Press Down key to see charts and gifs</span>
|
35
|
-
|
36
|
-
#VSLIDE
|
37
|
-
|
38
|
-
## Memory
|
39
|
-
|
40
|
-
![memory](assets/Memory3.png)
|
41
|
-
|
42
|
-
#VSLIDE
|
43
|
-
|
44
|
-
## CPU
|
45
|
-
|
46
|
-
![cpu](assets/cpu_chart.gif)
|
47
|
-
|
48
|
-
#VSLIDE
|
49
|
-
|
50
|
-
## Broadcast Round Trip Time
|
51
|
-
|
52
|
-
![rtt](assets/RTT3.png)
|
53
|
-
|
54
|
-
#HSLIDE
|
55
|
-
|
56
|
-
### Let's extract <span style="color:#e49436">WebSockets</span> somewhere else!
|
57
|
-
|
58
|
-
#HSLIDE
|
59
|
-
|
60
|
-
## AnyCable
|
61
|
-
|
62
|
-
#### Combines the good parts from <span style="color:#e49436">ActionCable</span> with the power of your favorite language for concurrent applications
|
63
|
-
|
64
|
-
<span style="font-size:0.6em; color:gray">How it works? See below</span>
|
65
|
-
|
66
|
-
#VSLIDE
|
67
|
-
|
68
|
-
## How AnyCable Works
|
69
|
-
|
70
|
-
![diagram](assets/Scheme2.png)
|
71
|
-
|
72
|
-
#VSLIDE
|
73
|
-
|
74
|
-
## [gRPC](http://grpc.io)
|
75
|
-
|
76
|
-
### Makes AnyCable to be a <span style="color:#e49436">polyglot</span>
|
77
|
-
|
78
|
-
#VSLIDE
|
79
|
-
|
80
|
-
## AnyCable
|
81
|
-
|
82
|
-
#### [Compatible](https://github.com/anycable/anycable#actioncable-compatibility) with ActionCable (channels, javascript, broadcasting)
|
83
|
-
|
84
|
-
#### You can still use ActionCable for <span style="color:#e49436">development</span> and <span style="color:#e49436">testing</span>
|
85
|
-
|
86
|
-
#VSLIDE
|
87
|
-
|
88
|
-
## AnyCable Servers
|
89
|
-
|
90
|
-
- [anycable-go](https://github.com/anycable/anycable-go)
|
91
|
-
|
92
|
-
- [erlycable](https://github.com/anycable/erlycable)
|
93
|
-
|
94
|
-
#VSLIDE
|
95
|
-
|
96
|
-
## AnyCable
|
97
|
-
|
98
|
-
### [Demo Application](https://github.com/anycable/anycable_demo)
|
99
|
-
|
100
|
-
#HSLIDE
|
101
|
-
|
102
|
-
## Benchmarks Again
|
103
|
-
|
104
|
-
#### AnyCable shows much more better performance.
|
105
|
-
|
106
|
-
<span style="font-size:0.6em; color:gray">Press Down key to see charts and gifs</span>
|
107
|
-
|
108
|
-
#VSLIDE
|
109
|
-
|
110
|
-
## Memory
|
111
|
-
|
112
|
-
![memory](assets/Memory5.png)
|
113
|
-
|
114
|
-
#VSLIDE
|
115
|
-
|
116
|
-
## CPU
|
117
|
-
|
118
|
-
![cpu](assets/cpu_chart2.gif)
|
119
|
-
|
120
|
-
#VSLIDE
|
121
|
-
|
122
|
-
## Broadcast Round Trip Time
|
123
|
-
|
124
|
-
![rtt](assets/RTT5.png)
|
125
|
-
|
126
|
-
|
127
|
-
#HSLIDE
|
128
|
-
|
129
|
-
## Let's Make ActionCable Not Suck!
|
130
|
-
|
131
|
-
[anycable.evilmartians.io](http://anycable.io/)
|
132
|
-
|
133
|
-
Vladimir Dementyev [@palkan_tula](http://twitter.com/palkan_tula)
|
134
|
-
|
135
|
-
[Evil Martians](http://evilmartians.com)
|
136
|
-
|
137
|
-
Twitter [@any_cable](http://twitter.com/any_cable)
|
138
|
-
|
139
|
-
GitHub [@anycable](http://github.com/anycable)
|