8000 Merge pull request #169 from sockjs/ws-ping · sockjs/sockjs-node@c7f9a5f · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit c7f9a5f

Browse files
committed
Merge pull request #169 from sockjs/ws-ping
#129, #162 add ws ping-pong and close if no response
2 parents 7c8bfd2 + 8c12b38 commit c7f9a5f

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/trans-websocket.coffee

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class WebSocketReceiver extends transport.GenericReceiver
5252
@connection.setNoDelay(true)
5353
catch x
5454
@ws.addEventListener('message', (m) => @didMessage(m.data))
55+
@heartbeat_cb = => @heartbeat_timeout()
5556
super @connection
5657

5758
setUp: ->
@@ -90,6 +91,18 @@ class WebSocketReceiver extends transport.GenericReceiver
9091
@ws = null
9192
@connection = null
9293

94+
heartbeat: ->
95+
supportsHeartbeats = @ws.ping null, ->
96+
clearTimeout(hto_ref)
97+
98+
if supportsHeartbeats
99+
hto_ref = setTimeout(@heartbeat_cb, 10000)
100+
else
101+
super
102+
103+
heartbeat_timeout: ->
104+
@session.close(3000, 'No response from heartbeat')
105+
93106

94107

95108
Transport = transport.Transport

src/transport.coffee

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class Session
163163
x = =>
164164
if @recv
165165
@to_tref = setTimeout(x, @heartbeat_delay)
166-
@recv.doSendFrame("h")
166+
@recv.heartbeat()
167167
@to_tref = setTimeout(x, @heartbeat_delay)
168168
return
169169

@@ -266,6 +266,9 @@ class GenericReceiver
266266
utils.quote(m)
267267
@doSendFrame('a' + '[' + q_msgs.join(',') + ']')
268268

269+
heartbeat: ->
270+
@doSendFrame('h')
271+
269272

270273
# Write stuff to response, using chunked encoding if possible.
271274
class ResponseReceiver extends GenericReceiver

0 commit comments

Comments
 (0)
0