Server SDKs
Ruby
Use the Ruby server SDK for Rails and Rack apps, including push notification workflows.
Install
gem "sockudo"bundle installConfigure
require "sockudo"
sockudo = Sockudo::Client.new(
app_id: "app-id",
key: "app-key",
secret: "app-secret",
host: "127.0.0.1",
port: 6001,
use_tls: false
)Publish
sockudo.trigger(
"orders",
"order.created",
{ id: "ord_123" },
{ idempotency_key: "order-created-ord_123" }
)
sockudo.trigger_batch([
{ channel: "orders", name: "order.created", data: { id: "ord_124" } },
{ channel: "orders", name: "order.paid", data: { id: "ord_124" } },
])Auth
private_auth = sockudo.authenticate("private-orders", params[:socket_id])
presence_auth = sockudo.authenticate(
"presence-lobby",
params[:socket_id],
user_id: "user-42",
user_info: { name: "Ada" }
)Webhooks
webhook = sockudo.webhook(request)
if webhook.valid?
webhook.events.each { |event| handle_event(event) }
head :ok
else
head :unauthorized
endPush notifications
sockudo.activate_device(
deviceId: "ios-device-1",
clientId: "user-42",
platform: "apns",
providerToken: "provider-token"
)
sockudo.upsert_channel_push_subscription(
deviceId: "ios-device-1",
clientId: "user-42",
channel: "orders"
)
accepted = sockudo.publish_push(
recipients: [{ type: "channel", channel: "orders" }],
payload: {
title: "Order updated",
body: "Order ord_123 is packed"
},
idempotency_key: "push-order-ord_123-packed"
)
status = sockudo.get_publish_status(accepted[:publish_id])Use Rails jobs for push fanout workflows that also touch your product database.