Skip to content

Commit 7b252f4

Browse files
committed
Remove uneeded heartbeat since cowboy handles timeouts
1 parent 234995e commit 7b252f4

File tree

3 files changed

+5
-38
lines changed

3 files changed

+5
-38
lines changed

Diff for: lib/phoenix/transports/websocket.ex

+2-28
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ defmodule Phoenix.Transports.WebSocket do
2424
It may be set to `false` (not recommended) or to a list of explicitly
2525
allowed origins
2626
27-
* `:heartbeat` - the heartbeat interval in milliseconds, default `30_000`
28-
2927
* `:code_reloader` - optionally override the default `:code_reloader` value
3028
from the socket's endpoint
3129
@@ -44,9 +42,8 @@ defmodule Phoenix.Transports.WebSocket do
4442

4543
def default_config() do
4644
[serializer: Phoenix.Transports.WebSocketSerializer,
47-
timeout: :infinity,
48-
transport_log: false,
49-
heartbeat: 30_000]
45+
timeout: 60_000,
46+
transport_log: false]
5047
end
5148

5249
def handlers() do
@@ -56,7 +53,6 @@ defmodule Phoenix.Transports.WebSocket do
5653
## Callbacks
5754

5855
import Plug.Conn, only: [fetch_query_params: 1, send_resp: 3]
59-
import Phoenix.Utils, only: [now_ms: 0]
6056

6157
alias Phoenix.Socket.Broadcast
6258
alias Phoenix.Socket.Transport
@@ -100,24 +96,19 @@ defmodule Phoenix.Transports.WebSocket do
10096
Process.flag(:trap_exit, true)
10197
serializer = Keyword.fetch!(config, :serializer)
10298
timeout = Keyword.fetch!(config, :timeout)
103-
heartbeat = Keyword.fetch!(config, :heartbeat)
10499

105100
if socket.id, do: socket.endpoint.subscribe(self, socket.id, link: true)
106101

107-
Process.send_after(self, :phoenix_heartbeat, heartbeat)
108102

109103
{:ok, %{socket: socket,
110104
channels: HashDict.new,
111105
channels_inverse: HashDict.new,
112-
client_last_active: now_ms(),
113-
heartbeat_interval: heartbeat,
114106
serializer: serializer}, timeout}
115107
end
116108

117109
@doc false
118110
def ws_handle(opcode, payload, state) do
119111
msg = state.serializer.decode!(payload, opcode: opcode)
120-
state = bump_client_last_active(state)
121112

122113
case Transport.dispatch(msg, state.channels, state.socket) do
123114
:noreply ->
@@ -150,23 +141,10 @@ defmodule Phoenix.Transports.WebSocket do
150141
format_reply(msg, state)
151142
end
152143

153-
def ws_info(:phoenix_heartbeat, state) do
154-
if client_unresponsive?(state) do
155-
{:shutdown, state}
156-
else
157-
Process.send_after(self, :phoenix_heartbeat, state.heartbeat_interval)
158-
encode_reply Transport.heartbeat_message(), state
159-
end
160-
end
161-
162144
def ws_info(_, state) do
163145
{:ok, state}
164146
end
165147

166-
defp client_unresponsive?(state) do
167-
now_ms() - state.client_last_active > (state.heartbeat_interval * 2)
168-
end
169-
170148
@doc false
171149
def ws_terminate(_reason, _state) do
172150
:ok
@@ -197,10 +175,6 @@ defmodule Phoenix.Transports.WebSocket do
197175
{:reply, {encoding, encoded_payload}, state}
198176
end
199177

200-
defp bump_client_last_active(state) do
201-
%{state | client_last_active: now_ms()}
202-
end
203-
204178
defp code_reload(conn, opts, endpoint) do
205179
reload? = Keyword.get(opts, :code_reloader, endpoint.config(:code_reloader))
206180
if reload?, do: Phoenix.CodeReloader.reload!(endpoint)

Diff for: test/phoenix/integration/websocket_test.exs

+2-9
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ defmodule Phoenix.Integration.WebSocketTest do
6363
channel "rooms:*", RoomChannel
6464

6565
transport :websocket, Phoenix.Transports.WebSocket,
66-
check_origin: ["//example.com"], heartbeat: 100
66+
check_origin: ["//example.com"], timeout: 100
6767

6868
def connect(%{"reject" => "true"}, _socket) do
6969
:error
@@ -238,21 +238,14 @@ defmodule Phoenix.Integration.WebSocketTest do
238238
assert log =~ "The client's requested channel transport version \"123.1.1\" does not match server's version"
239239
end
240240

241-
test "sends heartbeat and shuts down if client goes quiet" do
241+
test "shuts down if client goes quiet" do
242242
{:ok, socket} = WebsocketClient.start_link(self, "ws://127.0.0.1:#{@port}/ws/websocket")
243243
Process.monitor(socket)
244244
WebsocketClient.send_heartbeat(socket)
245245
assert_receive %Message{event: "phx_reply",
246246
payload: %{"response" => %{}, "status" => "ok"},
247247
ref: "1", topic: "phoenix"}
248248

249-
assert_receive %Message{event: "heartbeat", topic: "phoenix", payload: %{}}, 200
250-
251-
WebsocketClient.send_heartbeat(socket)
252-
assert_receive %Message{event: "phx_reply",
253-
payload: %{"response" => %{}, "status" => "ok"},
254-
ref: "2", topic: "phoenix"}, 200
255-
256249
assert_receive {:DOWN, _, :process, ^socket, :normal}, 400
257250
end
258251
end

Diff for: test/phoenix/socket_test.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ defmodule Phoenix.SocketTest do
6666

6767
test "transport config is exposted and merged with prior registrations" do
6868
ws = {Phoenix.Transports.WebSocket,
69-
[timeout: 1234, serializer: Phoenix.Transports.WebSocketSerializer, transport_log: false, heartbeat: 30_000]}
69+
[timeout: 1234, serializer: Phoenix.Transports.WebSocketSerializer, transport_log: false]}
7070

7171
lp = {Phoenix.Transports.LongPoll,
7272
[window_ms: 10000, pubsub_timeout_ms: 2000, serializer: Phoenix.Transports.LongPollSerializer,

0 commit comments

Comments
 (0)