Back

RealTime subscribe throws Concurrent modification during iteration: _Map len:0

  • 0
  • Self Hosted
  • Flutter
  • Realtime
darwinmorocho
2 May, 2024, 12:01

Hi I have installed appwrite in my ubuntu server with docker and nginx. Due to my server already has some apps running with pm2 I had to run my appwrite app using a reverse proxy.

When I use the next code to subscribe to realtime events it works for a few seconds

TypeScript
   final Realtime _realtime = Realtime(client);
.
.
.
    final userChannel = 'databases.my_db.collections.users.documents.$userId';
    final membershipChannel = 'databases.my_db.collections.memberships.documents.$userId';
    
// this works for around 30 seconds, after that time the appwrite sdk throws 
// Unhandled Exception: Concurrent modification during iteration: _Map len:0.
// And the realtime stop working
    _subscription = _realtime.subscribe(
      [userChannel, membershipChannel],
    );

Next after a few seconds I have this error in my console and the realtime stops working

TypeScript
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Concurrent modification during iteration: _Map len:0.
#0      _CompactIterator.moveNext (dart:collection-patch/compact_hash.dart:714:7)
#1      RealtimeMixin._createSocket.<anonymous closure> (package:appwrite/src/realtime_mixin.dart:91:49)
#2      _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#3      _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#4      _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#5      _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#6      _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#7      _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#8      _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#9      _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
TL;DR
Developers are encountering a 'Concurrent modification during iteration' error when using RealTime subscribe with appwrite SDK, which causes the RealTime to stop working after about 30 seconds. This issue arises while attempting to subscribe to realtime events. The error message indicates a problem with a _Map.
darwinmorocho
2 May, 2024, 12:02

This is my nginx configuration

TypeScript
server {
    server_name app.codergym.fit;

    location / {
        proxy_pass http://localhost:81;
    proxy_set_header Host $host;
    }

    location /v1/realtime {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://localhost:81/v1/realtime;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/encoding.meedu.app/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/encoding.meedu.app/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot



}
server {
    if ($host = app.codergym.fit) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name app.codergym.fit;
    listen 80;
    return 404; # managed by Certbot


}
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