network programming - que - ¿Hay algunas mejores prácticas generales de programación de red?
programador de red (5)
En una forma de pensar común sobre la programación de redes, creo que debes aprender sobre:
1. Toma de corriente (por supuesto).
2. Tenedor y enhebrado.
3. Proceso de bloqueo (use mutex o semáforo u otros).
Espero que esto ayude..
Estoy implementando algunas cosas de redes en nuestro proyecto. Se ha decidido que la comunicación es muy importante y queremos hacerlo de forma sincrónica. Entonces el cliente envía algo que el servidor reconoce.
¿Existen algunas mejores prácticas generales para la interacción entre el cliente y el servidor? Por ejemplo, si no hay una respuesta del servidor, ¿debería el cliente volver a intentar automáticamente? ¿Debería haber un período de tiempo de espera antes de volver a intentar? ¿Qué sucede si falla el reconocimiento? ¿En qué punto rompemos la conexión y volvemos a conectar? ¿Hay algún material? He hecho búsquedas pero nada realmente está por venir.
Estoy buscando las mejores prácticas en general. Estoy implementando esto en c # (probablemente con sockets) así que si hay algo específico de .Net, por favor háganmelo saber también.
Lo más importante que encontré es que los mensajes siempre deben ser apátridas (lee en REST si esto no significa nada para ti)
Por ejemplo, si su aplicación monitorea el número de envíos a través de una red, no envíe actualizaciones incrementales (+ x), pero siempre el total nuevo.
Lo primero que debe hacer es caracterizar su red específica en términos de velocidad, probabilidad de pérdida de mensajes, tráfico nominal y pico, cuellos de botella, MTBF de cliente y servidor, ...
Entonces, y solo entonces, usted decide qué necesita para su protocolo. En muchos casos, no necesita sofisticados mecanismos de manejo de errores y puede implementar de manera confiable un servicio con UDP simple.
En algunos casos, tendrá que construir algo mucho más robusto para mantener un estado global coherente entre varias máquinas conectadas a través de una red en la que no puede confiar.
Primera regla de la red: está enviando mensajes, no está llamando a funciones.
Si te acercas a la red de esa manera, y no pretendes llamar a las funciones de forma remota o tener "objetos remotos", estarás bien. Nunca tiene una "cosa" real en el otro lado de la conexión de red; lo que tiene es básicamente una imagen de esa cosa.
Todo lo que obtienes de la red es datos antiguos. Usted nunca está actualizado. Debido a esto, debe asegurarse de que sus mensajes tengan la semántica correcta; por ejemplo, puede incrementar o disminuir algo por un valor, no debe establecer su valor en el valor actual más o menos otro (ya que el valor actual puede cambiar cuando llegue tu mensaje).
Si tanto el cliente como el servidor están escritos en .NET / C #, recomendaría WCF en base a sockets sin formato, ya que le ahorra un montón de código de plomería con serialización y deserialización, sincronización de mensajes, etc.
Aunque tal vez no responda realmente a tu pregunta sobre las mejores prácticas ;-)