A serializer for Phoenix.Socket that encodes messages using BERT (Binary ERlang Term)
Add phoenix_socket_bert to your list of dependencies in mix.exs:
def deps do
[
{:phoenix_socket_bert, "~> 1.1"}
]
endSet the :serializer option in your Phoenix.Socket configuration:
endpoint.ex
socket "/live", Phoenix.LiveView.Socket,
longpoll: [connect_info: [session: @session_options]],
websocket: [
connect_info: [session: @session_options],
serializer: [{Phoenix.Socket.V2.BERTSerializer, "~> 2.0.0"}]
]
socket "/socket", Phoenix.Socket,
websocket: [
serializer: [{Phoenix.Socket.V2.BERTSerializer, "~> 2.0.0"}]
]Import the phoenix_socket_bert in your app.js and add decode option to the LiveSocket configuration:
app.js
import { decode } from "phoenix_socket_bert";
import { LiveSocket } from "phoenix_live_view";
import { Socket } from "phoenix";
let csrfToken = document
.querySelector('meta[name="csrf-token"]')
.getAttribute("content");
let liveSocket = new LiveSocket("/live", Socket, {
decode: decode,
longPollFallbackMs: 2500,
params: { _csrf_token: csrfToken },
});
liveSocket.connect();
let socket = new Socket("/socket", {
decode: decode,
params: { token: csrfToken },
});
socket.connect();To contribute you need to compile PhoenixSocketBert from source:
$ git clone https://github.com/Youimmi/phoenix_socket_bert.git
$ cd phoenix_socket_bert
This package is based on the excellent example https://github.com/zookzook/binary_ws by zookzook (Michael Maier)
Related to the discussion: phoenixframework/phoenix_live_view#616
PhoenixSocketBert is released under the MIT License