Si estoy creando una aplicación de Android para comunicarme con un robot (Linux + Python) a través de TCP, ¿la aplicación debería ser el servidor o el cliente, y por qué?

La complejidad es el archienemigo de la fiabilidad. Esa es la regla más importante que puedes aprender en programación.

Por lo tanto, dependerá del robot, de alguna manera. Si el robot necesita un control confiable en todo momento, entonces el cliente debe estar absolutamente en el teléfono porque no puede permitirse perder la conexión ni por un momento.

Sin embargo, si le asigna tareas al robot (por lo que es semiautónomo en lugar de ser controlado a distancia) Y el robot está operando en condiciones en las que no completar una tarea es un problema grave (como sería el caso en un UAV, un equivalente sumergible, un go-kart controlado por robot, etc.) pero no conseguir una nueva tarea es menos complicado, entonces el robot DEBE tener el software más simple. No puede permitirse que el controlador del robot entre en un bucle infinito, se bloquee o se inmovilice debido a una llamada del sistema de bloqueo. En estos casos, puede permitirse un problema técnico ocasional en el teléfono, pero no puede permitirse ni siquiera un problema técnico en el robot.

Si ambos deben ser razonablemente confiables, desea equilibrar la carga de trabajo para minimizar los riesgos de falla en ambos lados. En ese caso, estás viendo un cliente pesado (una ruta que nunca ha funcionado bien) o tienes algún software de servidor y otro software de cliente en ambos lados. O tal vez abandonar la estrategia cliente-servidor y optar por un sistema distribuido. En ese caso, el sistema no está en capas. En estas condiciones, es mejor usar canales en lugar de métodos de red convencionales, que están diseñados realmente para métodos cliente-servidor.

Comunicando procesos secuenciales

El beneficio de CSP en este tipo de problemas es que puede barajar dónde están los procesos. Debido a que este estilo de programación involucra un proceso que hace bien una cosa, ha reducido la complejidad de cada parte. Cada parte puede estar en cualquier lugar, puedes hacer malabarismos todo lo que quieras.

Estoy bastante seguro de que su robot tiene más capacidad de cálculo en el teléfono.

Si computation_capacitty: Robot> Teléfono:
El servidor va a Robot.
Más:
El teléfono llega a ser el servidor.

Tengo muchas suposiciones sobre la elección del robot para el servidor. ¿Ese robot acepta varios teléfonos conectados entre sí y funciona en él? En ese caso, el robot 100% debería tener el servidor.

SI, es algo así como un producto que desea vender, es fácil enviar actualizaciones al teléfono Android. ¡En ese caso, mantener controles mínimos en los robots es bueno!

Por cierto, depende de cómo vayas a diseñarlo. Modelo cliente-servidor, ¡GENIAL! pero también puede ser más de igual a igual.

Pero solo quitar es, que tiene más poder de cómputo elegir eso. Comprende que tienes mucho más control sobre el robot que en un teléfono Android no rooteado. Y solo para información, el teléfono Android también es Linux.

El robot tiene que ser el servidor. Debería instalar una aplicación liviana en su teléfono (o en cualquier teléfono que el servidor autentique para el caso), y el teléfono que es el servidor no lo haría.

Si hace que el robot sea el cliente, tendrá que estar bloqueado en ese teléfono específico con la aplicación.

Si la relación es puramente uno a uno (es decir, ese teléfono específico para ese robot específico), no importaría. Pero desde la perspectiva de una aplicación, tendría más sentido si una aplicación de teléfono móvil instalable se conectara a un servidor robot en espera de comandos.