android-developers
[Arriba] [Todas las Listas]

[android-developers] Peer A peer rendimiento de TCP/IP en Android

To: Android Developers <android-developers@xxxxxxxxxxxxxxxx>
Subject: [android-developers] Peer A peer rendimiento de TCP/IP en Android
From: David Haines <dave@xxxxxxxxxxxxxxxxxx>
Date: Fri, 18 Aug 2017 07:36:34 -0700 (PDT)
Delivery-date: Fri, 18 Aug 2017 10:37:06 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:date:from:to:message-id:subject:mime-version :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-subscribe:list-unsubscribe; bh=HLDt6SQRV9mNfnCUzosk70cCRUqsQjsXrUGmo5xF3bE=; b=rZNKitV3SI07XZuVDuinkNGRY0IA8dtMz2NPAv2NTsFH7pc+XUY3K2pt5x2aeETqy3 L9vtcSvvN47OLE/unVaQBdIzcHUgG0TBO6pSE24JgyHsCLh8S6+/m07H+XaJu7aKFhZQ re/rew/SOkWJ9QkcWDJA8E+fkbewD7b97gG75LV3gcmz/ZN/MXY5vs4BX9uCCgTVgua8 JUaVDG1cTzGm205qf06HsFhvkiFcQB1crjQMRLZ0iprVHpuMJLHgEvxUBUTMZVPbJvcY Q7YbdlXaaZAmffpLHFUEkv+OX9+FlW/nbRNXZZqKTa2gyHYesiLZVPPQGA6iTr4/gNlV FL6Q==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lyndsay-haines-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:message-id:subject:mime-version:x-original-sender :reply-to:precedence:mailing-list:list-id:list-post:list-help :list-archive:list-subscribe:list-unsubscribe; bh=HLDt6SQRV9mNfnCUzosk70cCRUqsQjsXrUGmo5xF3bE=; b=U5Y7x5rJqlzw4Eskh/otJHInmxuSDKx6xJaci8m1gx6U2jp/oEVz/ebzxDF1MjaG3N BQsWLbn8B+yPvn8tOIDBzR3A67WqhXKQzmj3yEmIXjpNQ1nzwBflruwp4MbEP6gzDbh4 nCBKdV8j721grIGEmzfixxteEmZIAsPCCe/G/5URyNqSo26t+mpv89K5HpzIaaE7Z9qz oUyqN0u+Tlt8HqdhXL+dkDmMVz9qZXxhFY+JHyJEznE8jh2BaotCgZXizjXJd7Ps/2Qw jjwsnfhnGGO3B7G2Fqtmp/r0CbE0WXWitt0sZn9fZl8HSwaTcfS13KO16Ir59gLWOCRr Hs+g==
Envelope-to: traductor@xxxxxxxxxxx
List-archive: <https://groups.google.com/group/android-developer>
List-help: <https://groups.google.com/support/>, <mailto:android-developers+help@googlegroups.com>
List-id: <android-developers.googlegroups.com>
List-post: <https://groups.google.com/group/android-developers/post>, <mailto:android-developers@googlegroups.com>
List-subscribe: <https://groups.google.com/group/android-developers/subscribe>, <mailto:android-developers+subscribe@googlegroups.com>
List-unsubscribe: <mailto:googlegroups-manage+364598216046+unsubscribe@googlegroups.com>, <https://groups.google.com/group/android-developers/subscribe>
Mailing-list: list android-developers@xxxxxxxxxxxxxxxx; contact android-developers+owners@xxxxxxxxxxxxxxxx
Reply-to: android-developers@xxxxxxxxxxxxxxxx
Sender: android-developers@xxxxxxxxxxxxxxxx
Nosotros'*ve desarrolló un *fairly *sophisticated *android aplicación de pastilla que 
confía en las pastillas que comunican *peer a *peer sobre *wifi. Estamos utilizando 
sinceros *java TCP/IP *sockets para hacer esto con nuestro nivel de aplicación 
propio *handshaking y protocolos, incluyendo *reconnection cuándo rotura 
de conexiones *etc. Todo esto está trabajando bien en incluso el *flakiest *wifi así que tenemos 
el producto que corre en *beta sitios ahora.

Aun así hay un problema que es *eluding nos tan lejos. Bajo algunas 
circunstancias (*unknown, pero tienden para ocurrir en *patches *temporally) estamos encontrando *socket leído o escribir tiempo de repente en el 10 segundo a 150 
segunda gama cuándo son normalmente en el 100*ms gama. Esto puede ir en puesto que 
muchos minutos, seguido por igualmente misteriosamente yendo fuera. Mientras está 
yendo en también veremos un aumento correspondiente en *turnround tiempo para *UDP 
paquetes (*pings) dirigido a las pastillas pertinentes como si el *android *wifi 
ha *somehow ido para dormir. El *app es todavía en el *foreground y está 
corriendo normalmente excepto lento *socket lee y escribe que podemos 
medir cualquier lado del *socket llamadas (los bloques de hilo naturalmente).

Nosotros'*ve eliminó *threading/*queue problemas como la causa - ahora tenemos un 
básico dos prueba de hilo programa que justo envía ligeramente *lumpy tráfico 
generado de un dispositivo a otro y lo repite atrás. No estamos enviando 
cantidades grandes de tráfico - típicamente unos cuantos *Kb #cada pocos minutos en una explosión, 
y a veces nada para periodos hasta medio una hora. Ocasionalmente hay 
un archivo descarga pero mayoritariamente en *startup tiempo. La lentitud es *unrelated a si 
la conexión ha sido recientemente utilizado (aparte del esperado 
'*wakeup tiempo' si la conexión o el dispositivo ha sido *dormant para un rato). 

Lentitud ocasional  no *hurt nos, pero desafortunadamente una vez lo empieza 
tiende para ser *sticky para un tiempo. Entonces va fuera sin cualquier intervención 
en nuestra parte. Cuándo manifiesta (sólo pasa en algunos sitios) entonces puede pasar entre una vez y #unos cuantos tiempo un día. No puede pasar para semanas.

Una teoría que tenemos es que *android no gusta el plazo largo abre *socket 
conexiones entre dispositivos. Haría sentido que podría ser *optimised 
para corto-conexiones vividas como *HTTP usos. Estamos probando una estrategia donde 
cerramos la conexión si es tranquilo y *reopen en demanda para ver si 
que hace una diferencia. Es un ciclo de prueba largo aun así cuando tenemos que tener un 
*setup corriendo para varios días antes de que podemos *realistically evaluar si 
ha habido cualquier mejora a raíz de un cambio. Tenemos muchos otras 
cosas en nuestra lista para probar fuera pero está tomando un tiempo largo debido al 
ciclo largo.

Estamos utilizando una mezcla de *Android 5 y 6 dispositivos (mayoritariamente 6 ahora - cualquier cosa ellos 
*upgrade a en el curso normal), y una gama ancha de *wifi *routers 
(*Netgear, *Ubiquiti, *OpenMesh, *Technicolor para nombrar unos cuantos). Todos exhiben el mismo 
problema, mientras podemos tener máquinas de Ventanas *merrily hablando a cada cual 
otro sobre el muy mismo *wifi red a la vez sin ver cualesquier 
problemas nada. El *routers difiere mayoritariamente en qué a menudo ellos justo conexiones 
de gota (*whereupon nosotros sencillamente *reconnect y traer en). Mayoritariamente estamos 
utilizando *Samsung *kit cuando nosotros'*ve encontró que para ser robusto, *performant y fiable.

*Wireshark Muestra un número aumentado de *resent paquetes cuándo tenemos las dos 
mitades del programa de prueba que corre en *android y dispositivos de ventanas y la lentitud 
manifiesta. Él  normalmente *afflict múltiple *android dispositivos sobre 
el mismo tiempo *i.*e. Si uno está viéndolo entonces a menudo ellos todo será. 
Pero no necesariamente todo.

Cuestión de nivel superior - tiene cualquiera problemas encontrados más similares a esto 
con *android *networking? Conseguimos la impresión aquello no muchas otras personas 
están utilizando *android así. No esperamos TCP/IP sobre *wifi para 
ser fiable en cualquier sentido especialmente fuera de en el mundo real de barato y alegre 
*wifi, pero este problema particular *hurts nos cuando necesitamos *responsive 
comunicaciones para operaciones seguras y el *stickiness del problema 
hace *retry ineficaz.

hay algunos cambios arquitectónicos podríamos hacer al diseño de nuestro 
*apps (más distribuido, menos cliente/*server) pero aquello es un movimiento grande justo para 
conseguir alrededor de un problema muy específico.

-- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*Android *Developers" grupo.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx.
A correo a este grupo, envía *email a *android-developers@xxxxxxxxxxxxxxxx.
Visita este grupo en *https://grupos.*google.*com/Grupo/*android-*developers.
Para ver esta discusión en la visita de web *https://grupos.*google.*com/*d/*msgid/*android-*developers/8620*f014-27*bb-48*da-812un-40*c80#uno51*ea1*d%40*googlegroups.*com.
Para más opciones, visita *https://grupos.*google.*com/*d/*optout.
We've developed a fairly sophisticated android tablet application which 
relies on tablets communicating peer to peer over wifi. We're using 
straightforward java TCP/IP sockets to do this with our own application 
level handshaking and protocols, including reconnection when connections 
break etc. All this is working well on even the flakiest wifi so we have 
the product running in beta sites now.

However there is one problem that is eluding us so far. Under some 
circumstances (unknown, but they tend to occur in patches temporally) we 
are finding socket read or write times suddenly in the 10 second to 150 
second range when they are normally in the 100ms range. This can go on for 
many minutes, followed by equally mysteriously going away. While it is 
going on we'll also see a corresponding increase in turnround time for UDP 
packets (pings) addressed to the relevant tablets as if the android wifi 
has somehow gone to sleep. The app is still in the foreground and is 
running normally except for slow socket reads and writes which we can 
measure either side of the socket calls (the thread blocks of course).

We've eliminated threading/queue problems as the cause - we now have a 
basic two thread test program which just sends slightly lumpy generated 
traffic from one device to another and echoes it back. We're not sending 
large amounts of traffic - typically a few Kb every few minutes in a burst, 
and sometimes nothing for periods up to half an hour. Occasionally there is 
a file download but mostly at startup time. The slowness is unrelated to 
whether the connection has been recently used (apart from the expected 
'wakeup time' if the connection or device has been dormant for a while). 

Occasional slowness won't hurt us, but unfortunately once it starts it 
tends to be sticky for a time. Then it goes away without any intervention 
on our part. When it does manifest (it only happens on some sites) then it 
may happen between once and a few times a day. It may not happen for weeks.

One theory that we have is that android doesn't like long term open socket 
connections between devices. It would make sense that it might be optimised 
for short-lived connections like HTTP uses. We are trying a strategy where 
we close the connection if it is quiet and reopen on demand to see whether 
that makes a difference. It's a long test cycle though as we have to have a 
setup running for several days before we can realistically assess whether 
there's been any improvement as a result of a change. We have many other 
things on our list to try out but it's taking a long time because of the 
long cycle.

We are using a mix of Android 5 and 6 devices (mostly 6 now - whatever they 
upgrade to in the normal course), and a wide range of wifi routers 
(Netgear, Ubiquiti, OpenMesh, Technicolor to name a few). All exhibit the 
same problem, while we can have Windows machines merrily talking to each 
other over the very same wifi network at the same time without seeing any 
problems at all. The routers differ mostly in how often they just drop 
connections (whereupon we simply reconnect and carry on). We're mostly 
using Samsung kit as we've found that to be robust, performant and reliable.

Wireshark shows an increased number of resent packets when we have the two 
halves of the test program running on android and windows devices and the 
slowness manifests. It will usually afflict multiple android devices at 
about the same time i.e. if one is seeing it then often they all will be. 
But not necessarily all.

Top level question - has anybody else come across problems similar to this 
with android networking? We get the impression that not many other people 
are using android like this. We don't expect TCP/IP over wifi to be 
reliable in any sense especially out in the real world of cheap and 
cheerful wifi, but this particular problem hurts us as we need responsive 
communications for certain operations and the stickiness of the problem 
makes retry ineffective.

There are some architectural changes we could make to the design of our 
apps (more distributed, less client/server) but that's a big move just to 
get round a very specific problem.

-- 
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to android-developers@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-developers/8620f014-27bb-48da-812a-40c80a51ea1d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<Anterior por Tema] Tema Actual [Siguiente por Tema>
  • [android-developers] Peer A peer rendimiento de TCP/IP en Android, David Haines <=