LiveQuery Server is laggy

I am running the same Angular + Parse JS SDK app in 2 browsers locally and I have Parse Server running on Google App Engine.

It works for the most part, its a chat app so ideally its kinda essential that 2 users can have a fluid conversation but i find it works message to message then sometimes i have to send 3 or 4 messages to trigger the live query “update” event.

Is this the kind of reliability to expect or should it be more fluid and reliable ? I am aware that to make it scale i need a separate live query server plus a separate redis server however I am having 1 conversation between 2 users locally in 2 browsers so I expected that adding the extra scaling servers wouldnt be necessary.

Any pointers would be great or if this is as good as it gets also appreciate if you can let me know so i can explore other ways

You may have some wrong in your code or deployment. Live Query should work fine in this scenario that you described. How many parse server instances do you have running in Google Cloud? If you have more than one, it might be the problem. The client can be connected to one of them, but the updated sometimes arriving to another. For solving this problem, you need to setup the redis server that will work as a bridge between the parse server instances.

No its just 1 AppEngine instance running on Google Cloud connected to MongoDB atlas cluster and running locally in 2 browsers, it will be running within an iOS and Android app context though but even in browser its laggy, sometime it works other times i have to send 3 or 5 messages and then it finally pushes the event to the other connected client. Im using the code below, i removed the code in the create and update hook but its pretty similar. Iniitially in the Threads Query i was using a constraint to see if the users ID was in an array of users in the chat however its now solely powered by ACL and the users ability to read the object so i would have assumed there may be a performance benefit from this but i dont see anything

  threadSync =  (userId: string, sessionToken: string) => { async () => {
    if(!userId && !sessionToken) {
      console.log('no user or session token')
    try {
      console.log('threadSync\'ing message threads for user: ', userId, sessionToken)
      const query        = new Parse.Query('Threads')
      const subscription = await query.subscribe(sessionToken);      
      subscription.on('open', async () => {      
        console.log('open websocket connection') 
        let threads      : Array<any> = [];
        let results      = await query.find()
        let threadsParse = JSON.parse(JSON.stringify(results)) 
        for (let index = 0; index < threadsParse.length; index++) {
          const thread = threadsParse[index];
      subscription.on('create', thread => {
        console.log('created', thread)
      subscription.on('update', thread => {
        console.log('update', thread)        
    } catch (error) {

Maybe if you try to run a local parse server and test again so you can now if the problem is related to something in the code or in the deployment.