faye-websocket 0.10.0 → 0.10.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.
Potentially problematic release.
This version of faye-websocket might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/lib/faye/rack_stream.rb +30 -12
- data/lib/faye/websocket/api.rb +3 -1
- data/lib/faye/websocket/client.rb +2 -4
- data/lib/faye/websocket.rb +11 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85557a18bc39ccf7f19ea25d9bb97778e4976a3c
|
4
|
+
data.tar.gz: ac8c769136548e7c8355fb01f7c79e6928fb0c32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e259cae366b3bc1995380905504677be7ec4ba2cc498c6ad01e0c9fc53157e910161635199d3fda017d1fb82263514a4c39ccc224fce920ac65b312a9664385
|
7
|
+
data.tar.gz: e922b280a0dd8ef81a0c5f0664af26459f921ace8dab435afbe1650505dac2c6c04b08605436b8ffd9ddb1351554ccd23fc5612e11f2999bd7b332c773993f73
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
### 0.10.1 / 2015-11-06
|
2
|
+
|
3
|
+
* Make sure errors can be safely emitted if creating the driver fails
|
4
|
+
* Prevent a race condition when binding `EM.attach` to the socket
|
5
|
+
|
1
6
|
### 0.10.0 / 2015-07-08
|
2
7
|
|
3
8
|
* Add the standard `code` and `reason` parameters to the `close` method
|
data/README.md
CHANGED
@@ -372,7 +372,7 @@ WebSocket performance in Passenger. This is
|
|
372
372
|
[documented in the Passenger manual](https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#tuning_sse_websockets).
|
373
373
|
|
374
374
|
```ruby
|
375
|
-
if defined?(
|
375
|
+
if defined?(PhusionPassenger)
|
376
376
|
PhusionPassenger.advertised_concurrency_level = 0
|
377
377
|
end
|
378
378
|
```
|
data/lib/faye/rack_stream.rb
CHANGED
@@ -15,21 +15,39 @@ module Faye
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def initialize(
|
19
|
-
@socket_object =
|
20
|
-
@connection =
|
21
|
-
@stream_send =
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
def initialize(socket)
|
19
|
+
@socket_object = socket
|
20
|
+
@connection = socket.env['em.connection']
|
21
|
+
@stream_send = socket.env['stream.send']
|
22
|
+
|
23
|
+
hijack_rack_socket
|
24
|
+
|
25
|
+
@connection.socket_stream = self if @connection.respond_to?(:socket_stream)
|
26
|
+
end
|
27
|
+
|
28
|
+
def hijack_rack_socket
|
29
|
+
return unless @socket_object.env['rack.hijack']
|
30
|
+
|
31
|
+
@socket_object.env['rack.hijack'].call
|
32
|
+
@rack_hijack_io = @socket_object.env['rack.hijack_io']
|
33
|
+
queue = Queue.new
|
34
|
+
|
35
|
+
EventMachine.schedule do
|
36
|
+
begin
|
37
|
+
EventMachine.attach(@rack_hijack_io, Reader) do |reader|
|
38
|
+
reader.stream = self
|
39
|
+
if @rack_hijack_io
|
40
|
+
@rack_hijack_io_reader = reader
|
41
|
+
else
|
42
|
+
reader.close_connection_after_writing
|
43
|
+
end
|
44
|
+
end
|
45
|
+
ensure
|
46
|
+
queue.push(nil)
|
29
47
|
end
|
30
48
|
end
|
31
49
|
|
32
|
-
|
50
|
+
queue.pop if EventMachine.reactor_running?
|
33
51
|
end
|
34
52
|
|
35
53
|
def clean_rack_hijack
|
data/lib/faye/websocket/api.rb
CHANGED
@@ -18,9 +18,12 @@ module Faye
|
|
18
18
|
attr_reader :url, :ready_state, :buffered_amount
|
19
19
|
|
20
20
|
def initialize(options = {})
|
21
|
+
@ready_state = CONNECTING
|
21
22
|
super()
|
22
23
|
::WebSocket::Driver.validate_options(options, [:headers, :extensions, :max_length, :ping, :proxy, :tls])
|
23
24
|
|
25
|
+
@driver = yield
|
26
|
+
|
24
27
|
if headers = options[:headers]
|
25
28
|
headers.each { |name, value| @driver.set_header(name, value) }
|
26
29
|
end
|
@@ -31,7 +34,6 @@ module Faye
|
|
31
34
|
|
32
35
|
@ping = options[:ping]
|
33
36
|
@ping_id = 0
|
34
|
-
@ready_state = CONNECTING
|
35
37
|
@buffered_amount = 0
|
36
38
|
|
37
39
|
@driver.on(:open) { |e| open }
|
@@ -10,8 +10,8 @@ module Faye
|
|
10
10
|
attr_reader :headers, :status
|
11
11
|
|
12
12
|
def initialize(url, protocols = nil, options = {})
|
13
|
-
@url
|
14
|
-
|
13
|
+
@url = url
|
14
|
+
super(options) { ::WebSocket::Driver.client(self, :max_length => options[:max_length], :protocols => protocols) }
|
15
15
|
|
16
16
|
[:open, :error].each do |event|
|
17
17
|
@driver.on(event) do
|
@@ -20,8 +20,6 @@ module Faye
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
super(options)
|
24
|
-
|
25
23
|
proxy = options.fetch(:proxy, {})
|
26
24
|
endpoint = URI.parse(proxy[:origin] || @url)
|
27
25
|
port = endpoint.port || DEFAULT_PORTS[endpoint.scheme]
|
data/lib/faye/websocket.rb
CHANGED
@@ -64,20 +64,26 @@ module Faye
|
|
64
64
|
def initialize(env, protocols = nil, options = {})
|
65
65
|
WebSocket.ensure_reactor_running
|
66
66
|
|
67
|
-
@env
|
68
|
-
@url
|
69
|
-
|
67
|
+
@env = env
|
68
|
+
@url = WebSocket.determine_url(@env)
|
69
|
+
|
70
|
+
super(options) { ::WebSocket::Driver.rack(self, :max_length => options[:max_length], :protocols => protocols) }
|
71
|
+
|
70
72
|
@stream = Stream.new(self)
|
71
73
|
|
72
74
|
if callback = @env['async.callback']
|
73
75
|
callback.call([101, {}, @stream])
|
74
76
|
end
|
77
|
+
end
|
75
78
|
|
76
|
-
|
77
|
-
@driver.
|
79
|
+
def start_driver
|
80
|
+
return if @driver.nil? || @driver_started
|
81
|
+
@driver_started = true
|
82
|
+
EventMachine.schedule { @driver.start }
|
78
83
|
end
|
79
84
|
|
80
85
|
def rack_response
|
86
|
+
start_driver
|
81
87
|
[ -1, {}, [] ]
|
82
88
|
end
|
83
89
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faye-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Coglan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -233,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
233
233
|
version: '0'
|
234
234
|
requirements: []
|
235
235
|
rubyforge_project:
|
236
|
-
rubygems_version: 2.4.5
|
236
|
+
rubygems_version: 2.4.5.1
|
237
237
|
signing_key:
|
238
238
|
specification_version: 4
|
239
239
|
summary: Standards-compliant WebSocket server and client
|