anycable-core 1.2.3 → 1.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/anycable/broadcast_adapters/http.rb +1 -1
- data/lib/anycable/broadcast_adapters/nats.rb +46 -0
- data/lib/anycable/broadcast_adapters/redis.rb +3 -2
- data/lib/anycable/cli.rb +1 -1
- data/lib/anycable/config.rb +28 -2
- data/lib/anycable/version.rb +1 -1
- data/sig/anycable/broadcast_adapters/nats.rbs +10 -0
- data/sig/anycable/config.rbs +9 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43353c30169b14234846a634a2f6e2cf9b8c205725752fcc9de78ed088e2432a
|
4
|
+
data.tar.gz: aa0b65f611dd8598b230d152f4b51ddfbdbd92c020081d957ab3f18179c6623f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fc3a9531075ec9da6ba4c7dc0e2e00f863829930f80a8b794e40aad13215db134c6195619d272188032502c6ae123f3567d781168580e1eb718d200042910b3
|
7
|
+
data.tar.gz: b7d91672f1976952a40315d92956f0d5970947e89d85e6e94a31240e3428e63c56093c173236ef46f25f5da47d5030cfd5576cdce8c248600a9959ceaa5e8145
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 1.2.4 (2022-08-10)
|
6
|
+
|
7
|
+
- Add NATS pub/sub adapter. ([@palkan][])
|
8
|
+
|
9
|
+
- Setting the redis adapter to use the ruby driver. ([@smasry][])
|
10
|
+
|
5
11
|
## 1.2.3 (2022-04-20)
|
6
12
|
|
7
13
|
- Pass unique connection id (_session id_) in the `anycable.sid` Rack env field. ([@palkan][])
|
@@ -124,3 +130,4 @@ See [Changelog](https://github.com/anycable/anycable/blob/0-6-stable/CHANGELOG.m
|
|
124
130
|
[@palkan]: https://github.com/palkan
|
125
131
|
[@sponomarev]: https://github.com/sponomarev
|
126
132
|
[@bibendi]: https://github.com/bibendi
|
133
|
+
[@smasry]: https://github.com/smasry
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "nats/client"
|
5
|
+
rescue LoadError
|
6
|
+
raise "Please, install the nats-pure gem to use NATS broadcast adapter"
|
7
|
+
end
|
8
|
+
|
9
|
+
require "json"
|
10
|
+
|
11
|
+
module AnyCable
|
12
|
+
module BroadcastAdapters
|
13
|
+
# NATS adapter for broadcasting.
|
14
|
+
#
|
15
|
+
# Example:
|
16
|
+
#
|
17
|
+
# AnyCable.broadcast_adapter = :nats
|
18
|
+
#
|
19
|
+
# It uses NATS configuration from global AnyCable config
|
20
|
+
# by default.
|
21
|
+
#
|
22
|
+
# You can override these params:
|
23
|
+
#
|
24
|
+
# AnyCable.broadcast_adapter = :nats, servers: "nats://my_nats:4242", channel: "_any_cable_"
|
25
|
+
class Nats < Base
|
26
|
+
attr_reader :nats_conn, :channel
|
27
|
+
|
28
|
+
def initialize(
|
29
|
+
channel: AnyCable.config.nats_channel,
|
30
|
+
**options
|
31
|
+
)
|
32
|
+
options = AnyCable.config.to_nats_params.merge(options)
|
33
|
+
@nats_conn = ::NATS.connect(nil, options)
|
34
|
+
@channel = channel
|
35
|
+
end
|
36
|
+
|
37
|
+
def raw_broadcast(payload)
|
38
|
+
nats_conn.publish(channel, payload)
|
39
|
+
end
|
40
|
+
|
41
|
+
def announce!
|
42
|
+
logger.info "Broadcasting NATS channel: #{channel}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
begin
|
4
4
|
require "redis"
|
5
5
|
rescue LoadError
|
6
|
-
raise "Please, install redis gem to use Redis broadcast adapter"
|
6
|
+
raise "Please, install the redis gem to use Redis broadcast adapter"
|
7
7
|
end
|
8
8
|
|
9
9
|
require "json"
|
@@ -14,7 +14,7 @@ module AnyCable
|
|
14
14
|
#
|
15
15
|
# Example:
|
16
16
|
#
|
17
|
-
# AnyCable.
|
17
|
+
# AnyCable.broadcast_adapter = :redis
|
18
18
|
#
|
19
19
|
# It uses Redis configuration from global AnyCable config
|
20
20
|
# by default.
|
@@ -30,6 +30,7 @@ module AnyCable
|
|
30
30
|
**options
|
31
31
|
)
|
32
32
|
options = AnyCable.config.to_redis_params.merge(options)
|
33
|
+
options[:driver] = :ruby
|
33
34
|
@redis_conn = ::Redis.new(**options)
|
34
35
|
@channel = channel
|
35
36
|
end
|
data/lib/anycable/cli.rb
CHANGED
@@ -121,7 +121,7 @@ module AnyCable
|
|
121
121
|
def wait_till_terminated
|
122
122
|
self_read = setup_signals
|
123
123
|
|
124
|
-
while readable_io = IO.select([self_read]) # rubocop:disable Lint/AssignmentInCondition
|
124
|
+
while readable_io = IO.select([self_read]) # rubocop:disable Lint/AssignmentInCondition
|
125
125
|
signal = readable_io.first[0].gets.strip
|
126
126
|
raise Interrupt, "SIG#{signal} received"
|
127
127
|
end
|
data/lib/anycable/config.rb
CHANGED
@@ -29,6 +29,12 @@ module AnyCable
|
|
29
29
|
redis_sentinels: nil,
|
30
30
|
redis_channel: "__anycable__",
|
31
31
|
|
32
|
+
### NATS options
|
33
|
+
nats_servers: "nats://localhost:4222",
|
34
|
+
nats_channel: "__anycable__",
|
35
|
+
nats_dont_randomize_servers: false,
|
36
|
+
nats_options: {},
|
37
|
+
|
32
38
|
### HTTP broadcasting options
|
33
39
|
http_broadcast_url: "http://localhost:8090/_broadcast",
|
34
40
|
http_broadcast_secret: nil,
|
@@ -48,10 +54,17 @@ module AnyCable
|
|
48
54
|
)
|
49
55
|
|
50
56
|
if respond_to?(:coerce_types)
|
51
|
-
coerce_types
|
57
|
+
coerce_types(
|
58
|
+
redis_sentinels: {type: nil, array: true},
|
59
|
+
nats_servers: {type: nil, array: true},
|
60
|
+
nats_dont_randomize_servers: :boolean,
|
61
|
+
debug: :boolean,
|
62
|
+
version_check_enabled: :boolean
|
63
|
+
)
|
52
64
|
end
|
53
65
|
|
54
|
-
flag_options :debug
|
66
|
+
flag_options :debug, :nats_dont_randomize_servers
|
67
|
+
ignore_options :nats_options
|
55
68
|
|
56
69
|
on_load do
|
57
70
|
# @type self : AnyCable::Config
|
@@ -82,6 +95,11 @@ module AnyCable
|
|
82
95
|
--redis-channel=name Redis channel for broadcasting, default: "__anycable__"
|
83
96
|
--redis-sentinels=<...hosts> Redis Sentinel followers addresses (as a comma-separated list), default: nil
|
84
97
|
|
98
|
+
NATS PUB/SUB
|
99
|
+
--nats-servers=<...addresses> NATS servers for pub/sub, default: "nats://localhost:4222"
|
100
|
+
--nats-channel=name NATS channel for broadcasting, default: "__anycable__"
|
101
|
+
--nats-dont-randomize-servers Pass this option to disable NATS servers randomization during (re-)connect
|
102
|
+
|
85
103
|
HTTP PUB/SUB
|
86
104
|
--http-broadcast-url HTTP pub/sub endpoint URL, default: "http://localhost:8090/_broadcast"
|
87
105
|
--http-broadcast-secret HTTP pub/sub authorization secret, default: <none> (disabled)
|
@@ -107,6 +125,14 @@ module AnyCable
|
|
107
125
|
end
|
108
126
|
end
|
109
127
|
|
128
|
+
# Build options for NATS.connect
|
129
|
+
def to_nats_params
|
130
|
+
{
|
131
|
+
servers: Array(nats_servers),
|
132
|
+
dont_randomize_servers: nats_dont_randomize_servers
|
133
|
+
}.merge(nats_options)
|
134
|
+
end
|
135
|
+
|
110
136
|
# Build HTTP health server parameters
|
111
137
|
def to_http_health_params
|
112
138
|
{
|
data/lib/anycable/version.rb
CHANGED
data/sig/anycable/config.rbs
CHANGED
@@ -8,6 +8,14 @@ module AnyCable
|
|
8
8
|
def redis_sentinels=: (Array[String]) -> void
|
9
9
|
def redis_channel: () -> String
|
10
10
|
def redis_channel=: (String) -> void
|
11
|
+
def nats_servers: () -> Array[String]
|
12
|
+
def nats_servers=: (Array[String]) -> void
|
13
|
+
def nats_channel: () -> String
|
14
|
+
def nats_channel=: (String) -> void
|
15
|
+
def nats_dont_randomize_servers: () -> bool
|
16
|
+
def nats_dont_randomize_servers=: (bool) -> void
|
17
|
+
def nats_options: () -> Hash[untyped, untyped]
|
18
|
+
def nats_options=: (Hash[untyped, untyped]) -> void
|
11
19
|
def http_broadcast_url: () -> String
|
12
20
|
def http_broadcast_url=: (String) -> void
|
13
21
|
def http_broadcast_secret: () -> String?
|
@@ -38,6 +46,7 @@ module AnyCable
|
|
38
46
|
def http_health_port_provided?: () -> bool
|
39
47
|
def to_redis_params: () -> { url: String, sentinels: Array[untyped]?, ssl_params: Hash[Symbol, untyped]? }
|
40
48
|
def to_http_health_params: () -> { port: Integer?, path: String }
|
49
|
+
def to_nats_params: () -> Hash[Symbol, untyped]
|
41
50
|
|
42
51
|
private
|
43
52
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anycable-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '4.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nats-pure
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,6 +171,7 @@ files:
|
|
157
171
|
- lib/anycable/broadcast_adapters.rb
|
158
172
|
- lib/anycable/broadcast_adapters/base.rb
|
159
173
|
- lib/anycable/broadcast_adapters/http.rb
|
174
|
+
- lib/anycable/broadcast_adapters/nats.rb
|
160
175
|
- lib/anycable/broadcast_adapters/redis.rb
|
161
176
|
- lib/anycable/cli.rb
|
162
177
|
- lib/anycable/config.rb
|
@@ -186,6 +201,7 @@ files:
|
|
186
201
|
- sig/anycable/broadcast_adapters.rbs
|
187
202
|
- sig/anycable/broadcast_adapters/base.rbs
|
188
203
|
- sig/anycable/broadcast_adapters/http.rbs
|
204
|
+
- sig/anycable/broadcast_adapters/nats.rbs
|
189
205
|
- sig/anycable/broadcast_adapters/redis.rbs
|
190
206
|
- sig/anycable/cli.rbs
|
191
207
|
- sig/anycable/config.rbs
|
@@ -232,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
248
|
- !ruby/object:Gem::Version
|
233
249
|
version: '0'
|
234
250
|
requirements: []
|
235
|
-
rubygems_version: 3.3.
|
251
|
+
rubygems_version: 3.3.11
|
236
252
|
signing_key:
|
237
253
|
specification_version: 4
|
238
254
|
summary: AnyCable core RPC implementation
|