Skip to content

Instantly share code, notes, and snippets.

@ananfang
Last active August 11, 2020 12:07
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save ananfang/a8d917ec88ff7e033bcceff1654fe737 to your computer and use it in GitHub Desktop.
Save ananfang/a8d917ec88ff7e033bcceff1654fe737 to your computer and use it in GitHub Desktop.
// This gist explains how to setup scalable Parse LiveQuery server on Heroku
// Because there is one and only 'web' process on Heroku, it will divide into two Heroku apps: Main and LiveQuery.
// A: Main app - All features except for LiveQuery server
// Step A1. Setup a Parse app on Heroku
// Step A2. Add a Heroku Redis (free plan is enough for testing)
// Step A3. Configure Parse app, add redisURL for liveQuery
var api = new ParseServer({
...
liveQuery: {
classNames: [...],
redisURL: REDIS_URL_ON_MAIN
},
...
});
// B: LiveQuery app - A scalable LiveQuery server for Main app
// Step B1. Steup another Parse app on Heroku
// Step B2. Configure Parse app, DO NOT set liveQuery
var api = new ParseServer({
appId: APP_ID_ON_LIVEQUERY,
masterKey: MASTER_KEY_ON_LIVEQUERY,
serverURL: SERVER_URL_ON_LIVEQUERY,
databaseURI: // (Optional) Even if leave this default, it will only get warning
});
// Step B3. Create LiveQuery server
var app = express();
app.use(PARSE_MOUNT_ON_LIVEQUERY, api);
var httpServer = require('http').createServer(app);
httpServer.listen(PORT_ON_LIVEQUERY, function() {/* Create HTTP server successfully */});
ParseServer.createLiveQueryServer(httpServer, {
redisURL: REDIS_URL_ON_MAIN // Redis URL from Mani app
});
// C: Client side - Swift for example
// Step C1. Init Client instance using Client(server:applicationId:clientKey:)
let client = Client(server: SERVER_URL_ON_LIVEQUERY, applicationId: APP_ID_ON_LIVEQUERY, clientKey: nil)
// Step C2. Subscribe for LiveQuery
let subscription = client.subscribe(query)
subscription.handle(Event.created, { query, object in
/* Handle CREATE event */
})
// In the end, we can scale web process in LiveQuery app on Heroku ^_^
@zackshapiro
Copy link

On AWS, you can do this with a single ParseServer:

  1. Add the following key/value pair to your initial ParseServer:
liveQuery: {
      classNames: ['messages', users'],
      redisURL: 'redis://localhost:6379'
 },
  1. Then after your existing listen function, just create a live query server
var port = process.env.PORT || 1337;
var httpServer = http.createServer(app);
httpServer.listen(port, function() {
    console.log('parse-server-example running on port ' + port + '.');
});
var parseLiveQueryServer = ParseServer.createLiveQueryServer(httpServer);
  1. Start redid and you should be good to go!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment