Track active users in your SocketCluster based application
Store all active socket data and channel subscriptions across multiple workers or hosts
Built-in garbage collection prunes abandoned or inactive records
Simple to install and use. Requires only a MySQL db and a single line of code.
Publishes a user count update whenever someone joins or leaves
Works with or without authenticated users
CREATE DATABASE IF NOT EXISTS `SCPresence`;
USE SCPresence;
DROP USER 'SCP_user'@'localhost';
FLUSH PRIVILEGES;
CREATE USER 'SCP_user'@'localhost' IDENTIFIED BY 'putyourpasswordhere';
GRANT SELECT ON `SCPresence`.* TO 'SCP_user'@'localhost';
GRANT INSERT ON `SCPresence`.* TO 'SCP_user'@'localhost';
GRANT UPDATE ON `SCPresence`.* TO 'SCP_user'@'localhost';
GRANT DELETE ON `SCPresence`.* TO 'SCP_user'@'localhost';
GRANT EXECUTE ON `SCPresence`.* TO 'SCP_user'@'localhost';
CREATE TABLE IF NOT EXISTS `SCPresence_users` (
SCP_id INT(11) NOT NULL AUTO_INCREMENT,
SCP_socket_id VARCHAR(255) DEFAULT NULL,
SCP_user_id INT(11) DEFAULT NULL,
SCP_channel VARCHAR(255) DEFAULT NULL,
SCP_updated DATETIME DEFAULT CURRENT_TIMESTAMP,
SCP_authToken VARCHAR(2048) DEFAULT NULL,
SCP_ip VARCHAR(255) DEFAULT NULL,
SCP_origin VARCHAR(1024) DEFAULT NULL,
PRIMARY KEY (SCP_id),
UNIQUE INDEX IX_unique_user_channel_socket (SCP_user_id, SCP_channel, SCP_socket_id)
)
ENGINE = INNODB;
npm install sc-presence
module.exports.run = function (worker) {
require('sc-presence').attach(worker, options);
};
Only scpDbhost and scpDbpassword are required
scpGcWorkerId
The worker id of the worker that will handle sc-presence garbage collection duties
Default Value: 0
scpGcInterval
The interval in number of seconds on which the garbage collection process will run
Default Value: 60
scpGcThreshold
The number of seconds that must pass without an update before the garbage collection process will remove a record
Default Value: 120
scpBlockUsercountThreshold
The number of seconds sc-presence will wait after startup before starting to publish user count updates.
This prevents sc-presence from spamming user count updates when the system is restarted and sockets are reconnecting.
Default Value: 60
scpSCPingsPerUpdate
The number of scServer.pingInterval periods that must pass before sc-presence will fire a database update
Default Value: 6
scpUsercountChannel
The name of the channel on which sc-presence will publish user count updates
Default Value: "USERCOUNT"
scpUsercountType
The type of user count update sc-presence will publish when a user joins or leaves
Possible values are: "SUBSCRIPTIONS", "SOCKETS", "USERS"
Default Value: "USERS"
scpPresenceChannel
The name of the channel that sc-presence will register primary socket presence under
Default Value: "_SCPRESENCE"
scpDbhost
The host name of the sc-presence db
Default Value: None
scpDbname
The name of the sc-presence db
Default Value: "SCPresence"
scpDbTablename
The name of the db table where sc-presence data is stored
Default Value: "SCPresence_users"
scpDbuser
The name of the db user that will authenticate to the sc-presence db
Default Value: "SCP_user"
scpDbpassword
The password for the db user that will authenticate to the sc-presence db
Default Value: None
scpConnectUpdateDelay
When a new socket connects, sc-presence will wait this many ms before publishing a user count update. This ensures the socket that connected has time to subscribe to the scpUsercountChannel channel before the user count is published
Default Value: 3000
scpUserIdField
The name of the property in the authToken which will be stored in the SCP_user_id field in the database
(numeric or string values are ok)
Default Value: "user_id"
{
scpGcWorkerId : 0,
scpGcInterval : 60,
scpGcThreshold : 120,
scpBlockUsercountThreshold : 60,
scpSCPingsPerUpdate : 6,
scpUsercountChannel : "USERCOUNT",
scpUsercountType : "USERS",
scpPresenceChannel : "_SCPRESENCE",
scpDbhost : "dbHostname",
scpDbname : "SCPresence",
scpDbTablename : "SCPresence_users",
scpDbuser : "SCP_user",
scpDbpassword : "besuretosetpassword",
scpConnectUpdateDelay : 3000,
scpUserIdField : "user_id"
}