Pregunta

Estoy construyendo un remoto .NET de cliente / servidor que se transmite miles de archivos, de diferentes tamaños (desde unos pocos bytes a cientos de MB), y me gustaría alguna información sobre el mejor método para lograr esta. Tal como lo veo, hay un par de opciones:

  • Serialize todo el archivo en mi objeto de interacción remota y transmisión en todos a la vez, independientemente de su tamaño. Esto probablemente sería el más rápido, pero un fallo durante la transmisión requiere que todo el archivo se volverá a transmitir, y no hay forma de reanudar.
  • Si el tamaño del archivo es mayor que algo pequeño (como 4 KB), romperlo en trozos de 4 KB y remotas esos, volver a montar en el servidor. Además de la complejidad de este, es más lento debido a las continuas viajes redondos y reconocimientos, aunque un fallo de cualquier pieza de un no pierde mucho tiempo.
  • La inclusión de algo parecido a un servidor FTP o SFTP mi aplicación - el cliente deberá notificar al servidor de que ha comenzado el uso de la comunicación remota, cargue el archivo, a continuación, utilizar entorno remoto para notificar la terminación. Me gustaría para contener todo en mi aplicación en lugar de requerir un servicio FTP separada, pero estoy abierto a esta opción si es necesario.
  • El uso de algún tipo de conexión TCP indicado o WPF o algún otro método de transmisión que está construido para manejar los fallos o es capaz de hacer algún tipo de puesto de control / hoja de vida.
  • Las demás que me falta?

¿Cuál es el método de transmisión más flexible / fiable? No estoy tan preocupado por la velocidad, pero más sobre la fiabilidad - Quiero el archivo en movimiento, aunque sea lentamente. Dado que el cliente y el servidor serán multi-hilo, que pueden transmitir varios archivos al mismo tiempo, si la conexión lo permite.

Gracias por su colaboración -. Me va a lanzar en una recompensa para obtener algunas recomendaciones sobre cómo la gente lograr esto

¿Fue útil?

Otros consejos

A pesar de calmh hace responder a la pregunta que usted está pidiendo desde la capa 4 de OSI lado de la vida, me siento más como usted está buscando más en los niveles de aplicaciones en su pregunta. TCP definitivamente hace mango todo lo que va de latencia, ventanas de transmisión, etc en el lado de red de la vida. Sin embargo, no determina directamente lo que sucede si un usuario termina una sesión de descarga antes de tiempo y luego decide recogerlo más tarde donde lo dejaron.

Para responder a su pregunta desde un ángulo diferente, sin duda recomendaría fragmentar el archivo en secciones y la indexación de ellos para todas las conexiones, independientemente de la velocidad. Pueden entonces ser re-ensamblados de nuevo en el cliente una vez que se haya descargado todo el archivo. Esto permite al usuario sesiones de descarga de pausa y reanudación.

En cuanto a la determinación de la velocidad, puede haber métodos de pre-construidos para hacer esto, pero un método que podría utilizar es simplemente construir su propia prueba de velocidad: Enviar 1 MB al cliente (carga) y tienen que enviar una respuesta una vez recibida. 1100 dividido por el tiempo que tomó para conseguir la parte posterior respuesta del cliente, es el kb / s que tarda el cliente para su descarga desde el servidor. Y viceversa para carga de prueba desde el cliente.

En cuanto a la transmisión, lo que lo recomendaría la utilización de las tecnologías existentes. SFTP soportes autenticados transferencia de datos cifrada . Se trata básicamente de FTP, pero a través de SSH. Debe haber algún lugar APIs disponibles para interactuar con esto.

En una nota lateral, nunca he hecho nada en la medida en que se habla de, pero espero que mis ideas por lo menos darle un par de opciones a considerar.

Esto es lo que en sí está hecho para TCP, y ajustado para las pruebas durante décadas o duro. Interacción remota se hace para las pequeñas llamadas RPC, no grandes transferencias de archivos. Usted simplemente debe usar un socket TCP para la transmisión de los datos, y dejar que los protocolos de capa inferior se preocupan de latencia, ventanas de transmisión, MTU, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top