В настоящее время я разрабатываю приложение с небольшой командой, используя Xamarin.Forms. Нам нужно связаться с базой данных, чтобы получить некоторые местоположения, детали заказа и так далее. Мы используем Google Firebase (Realtime DB) для этой цели. Все работает нормально, когда мы пишем и читаем данные. Однако в консоли 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;
}
Поскольку я не уверен, в чем проблема, я просто поместил здесь немного нашего кода. Было бы замечательно, если бы у кого-нибудь было решение этой проблемы или есть идеи, что мы можем попробовать.