Scaledrone | Pusher | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pricing | Subscription-based plans at afforable rates. Price comparison example:
| Expensive subscription based plans model. Price comparison example:
| ||||||||||||||||||
Private channels/rooms | YesRoom-level publish and subscribe access enabled via JWT authentication | YesUsing the private- prefix and authorization. | ||||||||||||||||||
Channel presence | YesScaledrone offers presence support for unlimited members per room. | YesPusher supports up to 100 members per channel for presence. | ||||||||||||||||||
Message history (persisted data) | YesMessage history retains real-time messages in memory, storing up to 100 latest messages per room for up to 30 days. | No | ||||||||||||||||||
Official API Clients | JavaScript, Java, Swift, React Native, Node.js, Go, Ruby, Python, PHP, REST | JavaScript, Java, Swift, Objective-C, .NET, Unity, Flutter, React Native, Go, Node.js, PHP, Python, Ruby | ||||||||||||||||||
Open API protocol for custom client development | YesScaledrone offers an open REST API for server-side publishing and a straightforward open socket API for custom client-side library development. | Yes | ||||||||||||||||||
Server-to-client data transmission | Yes | Yes | ||||||||||||||||||
Client-to-server data transmission | YesScaledrone enables bi-directional communication with client-to-server data sending capability. | No | ||||||||||||||||||
Client-to-client data transmission | YesFacilitates direct client-to-client communication, ideal for chat features. | No | ||||||||||||||||||
TLS connection | YesAll Scaledrone traffic, including REST and Socket connections, is secured with end-to-end SSL encryption. | Yes | ||||||||||||||||||
Debug console | Yes | Yes | ||||||||||||||||||
GDPR Compliant | Yes | Yes |
const drone = new Scaledrone('CHANNEL_ID'); drone.on('open', error => { drone.publish({ room: 'notifications', message: 'Hello from JavaScript!' }); });
import Scaledrone scaledrone = Scaledrone(channelID: "your-channel-id") scaledrone.delegate = self scaledrone.connect() func scaledroneDidConnect(scaledrone: Scaledrone, error: NSError?) { scaledrone.publish(message: "Hello from Swift", room: "notifications") }
final Scaledrone drone = new Scaledrone("CHANNEL_ID"); drone.connect(new Listener() { @Override public void onOpen() { drone.publish("notifications", myObject); } }
const Scaledrone = require('scaledrone-node-push'); const sd = new ScaleDrone({ channelId: 'channel_id', secretKey: 'secret_key' }); sd.publish('notifications', {foo: 'bar'});
import "github.com/ScaleDrone/scaledrone-go" func main() { client := scaledrone.NewBasicAuthClient("channel_id", "secret_key") _ = client.Publish([]byte("Hello Go"), "notifications") }
require 'scaledrone' sd = ScaleDrone.new({ channel_id: 'channel_id', secret_key: 'secret_key' }) sd.publish({foo: 'bar'}, 'notifications')
from scaledrone import ScaleDrone sd = ScaleDrone('channel_id', 'secret_key') sd.publish('notifications', {'foo': 'bar'})
$auth = array( 'channel_id' => 'channel_id', 'secret_key' => 'secret_key' ); $sd = new ScaleDrone\Client($auth); $message = ['foo' => 'bar']; $sd->publish('notifications', $message);
curl -H "Content-Type: application/json" \ -X POST \ -d '{"message": "Hello from ScaleDrone"}' \ https://api2.scaledrone.com/KtJ2qzn3CF3svSFe/notifications/publish
const drone = new Scaledrone('CHANNEL_ID'); drone.on('open', error => { const room = drone.subscribe('notifications'); room.on('data', message => { console.log('Received message', message); }); });
import Scaledrone func scaledroneDidConnect(scaledrone: Scaledrone, error: NSError?) { let room = scaledrone.subscribe(roomName: "notifications") room.delegate = self } func scaledroneRoomDidReceiveMessage(room: ScaledroneRoom, message: String) { print(message) }
final Scaledrone drone = new Scaledrone("CHANNEL_ID"); drone.connect(new Listener() { @Override public void onOpen() { drone.subscribe("myroom", new RoomListener() { @Override public void onMessage(Room room, JsonNode message) { System.out.println("Message: " + message.asText()); } //... } } }
const Scaledrone = require('scaledrone-node'); const drone = new Scaledrone('CHANNEL_ID'); drone.on('open', error => { const room = drone.subscribe('notifications'); room.on('data', message => { console.log('Received message', message); }); });