Cześć,
Mam serwer we flasku postawiony na heroku, który stanowi api dla aplikacji mobilnej napisanej w Xamarin.Forms. Wszystko sobie działało bezproblemowo przez parę miesięcy, ale ostatnio zaczęły się problemy (mimo, że nic nie zmieniałem). Apka mobilna odpytuje api:
HttpResponseMessage response =
await httpClient.GetAsync(url + "?token=" + token);
string result = await response.Content.ReadAsStringAsync();
I wyrzuca wyjątek:
Read error: ssl=0xd6269d18: I/O error during system call, Connection reset by peer
Kod serwera:
@app.route('/get', methods=['GET'])
def get():
clients = get_users() # pobiera z bazy danych
token = request.args.get('token')
for c in clients:
if(c.token == token):
return c.to_json()
abort(400) # nie ma klienta o danym tokenie
Problem jest tylko czasami - czasem wszystko działa ok, a czasem coś idzie nie tak i jest wyjątek.
Nie mam pojęcia gdzie w ogóle szukać źródła problemu. W serwerze? W aplikacji mobilnej? Ani w jednym, ani w drugim nic nie zmieniałem, a problem pojawił się nagle. Nawet jak apka wyrzuca wyjątek, to heroku pokazuje w logach, że serwer na zapytanie odpowiedział z kodem 200.
Na razie napisałem skrypt w pythonie (biblioteka requests) który odpytuje api w taki sam sposób jak aplikacja mobilna. Puściłem go dużo razy i za każdym razem otrzymał od serwera poprawną odpowiedź. To sprawia, że zastanawiam się, czy nie należy szukać rozwiązania po stronie klienta (apki mobilnej). Choć może to tylko przypadek.