Websocket client for Phoenix Elixir
Project description
phxsocket
Synchronous phoenix websocket client using callbacks
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)
Built Distribution
phxsocket-0.1.5-py3-none-any.whl
(18.1 kB
view details)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab4dba9cf5a25f6ae2c1959ca6c6e2da0a6d026f546aed6d42cbab8e7bb6c36c |
|
MD5 | b9e5ae37f6d3514a6e869e21cab948b7 |
|
BLAKE2b-256 | 360f90a2060e1ed9dfcf07bf8d9be69f0f9dcdd6bcd93c39bd4dab4ec0098367 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 454f448bb800e2cbbf152751121b122c101c52cd6896aa3a793c229973afefbf |
|
MD5 | fd9555632e78e5b98fbd25fa846dd28b |
|
BLAKE2b-256 | 3e0c0b6ee2cfdd17987d0737cce65b16e402bb6c6424ca0c6f26e468b63af78a |