【发布时间】: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