【问题标题】:Firebase Xamarin.Forms - too many concurrent connectionsFirebase Xamarin.Forms - 并发连接太多
【发布时间】:2020-05-01 13:58:11
【问题描述】:

目前,我正在与一个使用 Xamarin.Forms 的小团队一起开发一个应用程序。我们需要与数据库通信以获取一些位置、订单详细信息等。为此,我们正在使用 Google 的 Firebase(实时数据库)。当我们写入和读取数据时,一切正常。但是,在 Firebase 控制台的使用情况选项卡中,有超过 50 个并发连接。这很奇怪,因为我们目前正在开发并且没有发布我们的应用程序的任何版本。最多应该有 5 个并发连接(我们是 5 个团队)。

我们正在使用 NuGet-Package FirebaseDatabase.net (4.0.4) https://www.nuget.org/packages/FirebaseDatabase.net/ 来读取和写入数据库。

多个侦听器用于能够对数据库中的更改做出反应(到目前为止,似乎每个侦听器都占用了一个似乎不正确的连接)。

下面的代码展示了 FirebaseClient 的初始化,它在构造函数中被调用一次。

private FirebaseClient InitDbClient()
{
    var dbClient = new FirebaseClient(Constants.Values.FIREBASE_DATABASE_URL, new FirebaseOptions()
    {
        AuthTokenAsyncFactory = () => Task.FromResult(_authToken)
    });
    return dbClient;
}

每个监听器的实现方式与以下代码类似:

public IDisposable SubscribeToChatMessages(string orderID)
{
    var observer = _dbClient.Child($"orders/{orderID}/Chat/Messages").AsObservable<JObject>();

    var subscribe = observer.Subscribe(t =>
    {
        if (t.EventType == Firebase.Database.Streaming.FirebaseEventType.Delete)
        {
            return;
        }

        ChatMessage msg;
        try
        {
            msg = JsonConvert.DeserializeObject<ChatMessage>(t.Object.ToString());
        }catch(Exception e)
        {
            Debug.WriteLine(e.Message);
            msg = new ChatMessage() { C = null, T = new DateTime(), U = null };
        }

        //...do something with the chat message
    });
    return subscribe;
}

因为我不确定问题出在哪里,所以我只是将我们的一些代码放在这里。如果有人对此问题有解决方案或知道我们可以尝试什么,那就太好了。

【问题讨论】:

    标签: c# firebase xamarin.forms concurrency connection


    【解决方案1】:

    我自己找到了答案。正如我已经怀疑每个听众都使用一个连接。原因很简单:这个包是建立在 firebase 的 rest api 之上的。在其他一些问题中提到,每个侦听器基本上都是一个流式 Web 套接字(或类似的东西)。其中每一个都消耗一个并发连接。

    作为一种解决方法(以减少并发连接的数量),我将所有实际上不需要的侦听器替换为一个计时器和一个简单的数据库请求的组合。为了能够查询新数据,我向数据本身添加了时间戳。这允许我使用类似于

    的数据库查询
    dbClient.Child($"orders/{orderID}/Chat/Messages").orderBy("Time").startAt(lastRead).OnceAsync<>()...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2013-05-09
      相关资源
      最近更新 更多