What is pubnub?
PubNub is a real-time communication platform that allows developers to build applications with real-time messaging, presence, and data synchronization capabilities. It is commonly used for chat applications, live updates, IoT device communication, and more.
What are pubnub's main functionalities?
Real-time Messaging
This feature allows you to send real-time messages to a specific channel. The code sample demonstrates how to publish a message to a channel using PubNub.
const PubNub = require('pubnub');
const pubnub = new PubNub({
publishKey: 'your-publish-key',
subscribeKey: 'your-subscribe-key'
});
pubnub.publish({
channel: 'my_channel',
message: { text: 'Hello, World!' }
}, (status, response) => {
if (status.error) {
console.log('Publish failed: ', status);
} else {
console.log('Message published with timetoken', response.timetoken);
}
});
Real-time Subscription
This feature allows you to subscribe to a channel and receive real-time messages. The code sample demonstrates how to listen for new messages on a subscribed channel.
const PubNub = require('pubnub');
const pubnub = new PubNub({
publishKey: 'your-publish-key',
subscribeKey: 'your-subscribe-key'
});
pubnub.addListener({
message: function(event) {
console.log('New message received: ', event.message);
}
});
pubnub.subscribe({
channels: ['my_channel']
});
Presence Detection
This feature allows you to detect the presence of users in a channel. The code sample demonstrates how to listen for presence events such as join, leave, and timeout.
const PubNub = require('pubnub');
const pubnub = new PubNub({
publishKey: 'your-publish-key',
subscribeKey: 'your-subscribe-key'
});
pubnub.addListener({
presence: function(event) {
console.log('Presence event: ', event);
}
});
pubnub.subscribe({
channels: ['my_channel'],
withPresence: true
});
History
This feature allows you to retrieve the message history of a channel. The code sample demonstrates how to fetch the last 10 messages from a channel's history.
const PubNub = require('pubnub');
const pubnub = new PubNub({
publishKey: 'your-publish-key',
subscribeKey: 'your-subscribe-key'
});
pubnub.history({
channel: 'my_channel',
count: 10
}, (status, response) => {
if (status.error) {
console.log('History retrieval failed: ', status);
} else {
console.log('Message history: ', response.messages);
}
});
Other packages similar to pubnub
socket.io
Socket.IO is a library that enables real-time, bidirectional, and event-based communication between web clients and servers. It is commonly used for chat applications, live updates, and real-time analytics. Compared to PubNub, Socket.IO is more focused on web sockets and may require more server-side setup.
pusher
Pusher is a hosted service that makes it easy to add real-time data and functionality to web and mobile applications. It offers features like real-time messaging, presence, and webhooks. Pusher is similar to PubNub in terms of functionality but is a hosted service with a different pricing model.
ably
Ably is a real-time messaging service that provides pub/sub messaging, presence, and data synchronization. It is designed for high scalability and reliability. Ably offers similar features to PubNub but emphasizes performance and global data distribution.
PubNub JavaScript SDK (V4)
This is the official PubNub JavaScript SDK repository.
PubNub takes care of the infrastructure and APIs needed for the realtime communication layer of your application. Work on your app's logic and let PubNub handle sending and receiving data across the world in less than 100ms.
Get keys
You will need the publish and subscribe keys to authenticate your app. Get your keys from the Admin Portal.
Tutorial Video
Watch Getting Started with PubNub JS SDK on Dashcam
Configure PubNub
-
Integrate the JavaScript SDK into your project:
- use
npm
:
npm install pubnub
- or download one of our builds from our CDN:
-
Configure your keys:
pubnub = new PubNub({
publishKey: 'myPublishKey',
subscribeKey: 'mySubscribeKey',
userId: 'myUniqueUserId',
});
Add event listeners
const channel = pubnub.channel('my_channel');
const subscription = channel.subscription();
subscription.subscribe();
subscription.onMessage = (messageEvent) => { console.log("Message event: ", messageEvent); };
subscription.onPresence = (presenceEvent) => { console.log("Presence event: ", presenceEvent); };
subscription.onMessage = (messageEvent) => { console.log("Message event: ", messageEvent); };
subscription.onPresence = (presenceEvent) => { console.log("Presence event: ", presenceEvent); };
subscription.onSignal = (signalEvent) => { console.log("Signal event: ", signalEvent); };
subscription.onObjects = (objectsEvent) => { console.log("Objects event: ", objectsEvent); };
subscription.onMessageAction = (messageActionEvent) => { console.log("Message Action event: ", messageActionEvent); };
subscription.onFile = (fileEvent) => { console.log("File event: ", fileEvent); };
subscription.addListener({
message: function (m) {
const channelName = m.channel;
const channelGroup = m.subscription;
const pubTT = m.timetoken;
const msg = m.message;
const publisher = m.publisher;
},
presence: function (p) {
const action = p.action;
const channelName = p.channel;
const occupancy = p.occupancy;
const state = p.state;
const channelGroup = p.subscription;
const publishTime = p.timestamp;
const timetoken = p.timetoken;
const uuid = p.uuid;
},
signal: function (s) {
const channelName = s.channel;
const channelGroup = s.subscription;
const pubTT = s.timetoken;
const msg = s.message;
const publisher = s.publisher;
},
objects: (objectEvent) => {
const channel = objectEvent.channel;
const channelGroup = objectEvent.subscription;
const timetoken = objectEvent.timetoken;
const publisher = objectEvent.publisher;
const event = objectEvent.event;
const type = objectEvent.type;
const data = objectEvent.data;
},
messageAction: function (ma) {
const channelName = ma.channel;
const publisher = ma.publisher;
const event = ma.event;
const type = ma.data.type;
const value = ma.data.value;
const messageTimetoken = ma.data.messageTimetoken;
const actionTimetoken = ma.data.actionTimetoken;
},
file: function (event) {
const channelName = event.channel;
const channelGroup = event.subscription;
const publisher = event.publisher;
const timetoken = event.timetoken;
const message = event.message;
const fileId = event.file.id;
const fileName = event.file.name;
const fileUrl = event.file.url;
}
});
Publish/subscribe
const channel = pubnub.channel('my_channel');
const subscription = channel.subscription();
subscription.subscribe();
try {
const result = await pubnub.publish({
message: {
such: "object",
},
channel: "my_channel",
sendByPost: false,
storeInHistory: false,
meta: {
cool: "meta",
},
});
} catch (status) {
console.log(status);
}
Documentation
Support
If you need help or have a general question, contact support@pubnub.com.