Last active
August 11, 2020 12:07
-
-
Save ananfang/a8d917ec88ff7e033bcceff1654fe737 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 ^_^ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
On AWS, you can do this with a single ParseServer:
listen
function, just create a live query server