Skip to main content

Websocket client for Phoenix Elixir

Project description

phxsocket

Synchronous phoenix websocket client using callbacks

Phoenix channels

Requirements

websockets

Usage

Import the package

import phxsocket

Create socket client

# endpoint.ex
socket "/socket", MyAppWeb.Socket, websocket: true, longpoll: false
socket = phxsocket.Client("wss://target.url/socket/websocket", {"name": "my name"})

Socket params go to Phoenix.Socket connect/3

Connect and join a channel

# mysocket.ex
defmodule MyAppWeb.Socket do
  use Phoenix.Socket

  channel("channel:*", MyAppWeb.Channel)

  def connect(%{"name" => name} = params, socket, _connect_info) do
    {:ok, socket |> assign(name: name)}
  end

  def id(socket), do: nil
end

defmodule MyAppWeb.Channel do
  use Phoenix.Channel

  def join("channel:" <> room_name, %{"password" => password}, socket) do
    if password == "1234" do
      {:ok, socket}
    else
      {:error, %{reason: "unauthorized"}}
    end
  end
end
if socket.connect(): # blocking, raises exception on failure
  channel = socket.channel("channel:my room", {"password": "1234"})
  resp = channel.join() # also blocking, raises exception on failure

Alternatively

def connect_to_channel(socket):
  channel = socket.channel("channel:my room", {"password": "1234"})
  resp = channel.join()

socket.on_open = connect_to_channel
connection = socket.connect(blocking=False)

connection.wait() # blocking, raises exception on failure

Reconnect on disconnection

socket.on_close = lambda socket: socket.connect()

Subscribe to events

def do_something(payload):
  content = payload["content"]

channel.on("message", do_something)
MyAppWeb.Endpoint.broadcast("channel:my room", "message", %{"content": "hello"})

Push data to a channel

defmodule MyAppWeb.Channel do
...
def handle_in("message", %{"content" => content}, socket) do
  IO.inspect("received from #{socket.assigns.name}: #{content}")
  {:reply, {:ok, "hello"}, socket}
end
channel.push("message", {"content": "hello"})

This throws away the reply if the return value of handle_in is :reply

Push data and wait for a response

message = channel.push("message", {"content": "hello"}, reply=True)
payload = message.wait_for_response() # blocking

Push data and react to the response with a callback

def response(payload):
  print(payload["status"]) # ok
  print(payload["response"]) # hello

channel.push("message", {"content": "hello"}, response)

Leave a channel

channel.leave()

Disconnect

socket.close()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phxsocket-0.1.5.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

phxsocket-0.1.5-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file phxsocket-0.1.5.tar.gz.

File metadata

  • Download URL: phxsocket-0.1.5.tar.gz
  • Upload date:
  • Size: 17.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.4

File hashes

Hashes for phxsocket-0.1.5.tar.gz
Algorithm Hash digest
SHA256 ab4dba9cf5a25f6ae2c1959ca6c6e2da0a6d026f546aed6d42cbab8e7bb6c36c
MD5 b9e5ae37f6d3514a6e869e21cab948b7
BLAKE2b-256 360f90a2060e1ed9dfcf07bf8d9be69f0f9dcdd6bcd93c39bd4dab4ec0098367

See more details on using hashes here.

File details

Details for the file phxsocket-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: phxsocket-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.4

File hashes

Hashes for phxsocket-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 454f448bb800e2cbbf152751121b122c101c52cd6896aa3a793c229973afefbf
MD5 fd9555632e78e5b98fbd25fa846dd28b
BLAKE2b-256 3e0c0b6ee2cfdd17987d0737cce65b16e402bb6c6424ca0c6f26e468b63af78a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page