Back

realtime subscription not closing.

  • 0
  • Flutter
  • Storage
Karthik
15 Mar, 2023, 17:46

i used the subscription.close but still socket connection remains open. my aim is to refresh connections if a team is created , user is added to the team and all permission of the document is given to that team. but while creating that document invocation is not sent to that users in the team. (All collection permission is create to all user).

TL;DR
The user is experiencing an issue where their realtime subscription is not closing properly. They are using the `realtime.subscribe()` method multiple times and calling `subscription.close()` to close the subscription. However, the websocket connection remains open. They have provided code in Flutter and are refreshing the connection every 5 seconds for testing purposes. They are trying to refresh the connection when a team is created and a user is added to the team. However, the invocation is not being sent to the users in the team. The user is looking for assistance in resolving this issue.
joeyouss
15 Mar, 2023, 18:11

Hi, any chance you could show me your code?

Karthik
15 Mar, 2023, 18:48

ok , i have made a test code. which basically refresh connection every 5 seconds . its just for testing purpose. before refreshing previous connection is closed.

Karthik
15 Mar, 2023, 18:49

getSavedData() async { await sessionCreate(context, true, 95620444); const oneSec = Duration(seconds: 5); Timer.periodic(oneSec, (Timer t) async { //printIps();

TypeScript
  // if (subscription != null) {

  try {
    subscription!.close();
  } catch (e) {
    print(e);
  }

  // }

  create(context);
});

}

Karthik
15 Mar, 2023, 18:49

create(BuildContext context) async { final realtime = Realtime(client!); //RealtimeSubscription subscription; try { subscription = realtime.subscribe([ 'databases.62f21a94d3a40d60445b.collections.62a899742200380b8ca7.documents' ]); subscription!.stream.listen( (data) { print(data.payload); if (data.payload.isNotEmpty) { List<dynamic> ev = data.events; print(ev.elementAt(0)); String b = ev.elementAt(0); switch (data.events.elementAt(0)) { case 'databases.62f21a94d3a40d60445b.collections.62a899742200380b8ca7.documents..create': var item = data.payload; print(item); print("items added"); break; case "databases.62f21a94d3a40d60445b.collections.62a899742200380b8ca7.documents..delete": var item = data.payload; print(item); print("items deleted"); break; case "databases.62f21a94d3a40d60445b.collections.documents.update": var item = data.payload; print(item); print("items updated"); break; default: break; } } }, onDone: () { print("test"); }, ); //subscription!.close(); } catch (eee) { print(eee); } }

Drake
15 Mar, 2023, 20:14

so how many times are you calling realtime.subscribe()? just once?

Drake
15 Mar, 2023, 20:15

btw, for multi-line code, it's best to wrap with 3 backticks and include the language like https://www.markdownguide.org/extended-syntax/#syntax-highlighting

Karthik
15 Mar, 2023, 20:16

it also called multiple times

Drake
15 Mar, 2023, 20:17

using the same realtime instance?

Karthik
15 Mar, 2023, 20:26

code is in flutter, realtime is declaration is outside timer.

Drake
15 Mar, 2023, 20:29

so you use that realtime instance and call realtime.subscribe() multiple times?

Karthik
15 Mar, 2023, 20:47

yes

Drake
15 Mar, 2023, 21:08

So the websocket will remain open unless all subscriptions are closed. If you have multiple subscriptions, you could be running into race conditions where it seems like not all closed , but they all did

Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more