Si envío dos mensajes TCP, ¿necesito manejar el caso donde este último llega antes que el anterior? ¿O está garantizado que llegue en el orden en que lo envío? Supongo que este no es un ejemplo específico Twisted, porque debe ajustarse al estándar TCP, pero si alguien familiarizado con Twisted pudiera proporcionar una respuesta Twisted-specific para mi propia tranquilidad, sería apreciado :-)¿Está TCP garantizado para llegar en orden?
Respuesta
Siempre que se envíen los dos mensajes en la misma conexión TCP, se mantendrá el orden. Si se abren múltiples conexiones entre el mismo par de procesos, puede tener problemas.
En cuanto a Twisted, o cualquier otro sistema de eventos asíncronos: supongo que obtendrá los mensajes dataReceived
en el orden en que se reciben los bytes. Sin embargo, si comienza a eliminar el trabajo de las llamadas diferidas, puede, erm ... "torcer" su flujo de control más allá del reconocimiento.
TCP es una secuencia, UDP es un mensaje. Estás mezclando términos. Para TCP, es cierto que la transmisión llegará en el mismo orden en que fue enviada. No hay mensajes distict en TCP, los bytes aparecen a medida que llegan, interpretándolos como mensajes depende de usted.
Re: terms - Sí, por supuesto. Sin embargo, Twisted abstrae esto en mensajes distintos (así que interpretarlos como mensajes no me corresponde a mí) – Smashery
Y vale la pena señalar que aunque podría tener dos escrituras en el lado del remitente, podrían colapsar en una sola lectura en el lado del receptor, y viceversa Versa - Dependiendo de los tamaños del buffer y las condiciones de la red. –
No, Twisted no resume TCP en "mensajes". Obtendrá un trozo de bytes (hasta un byte por vez en casos extremos) en el protocolo base. – truppo
TCP está orientado a la conexión y ofrece a sus clientes por pedido entrega. Por supuesto, esto se aplica al nivel de conexión: las conexiones individuales son independientes.
Debe tener en cuenta que normalmente nos referimos a "transmisiones TCP" y "mensajes UDP".
Cualquiera que sea la biblioteca cliente que use (por ejemplo, Twisted), la conexión TCP subyacente es independiente de ella. TCP entregará los "mensajes de protocolo" para su cliente. Por "mensaje de protocolo" me refiero, por supuesto, al protocolo que usa en la capa TCP.
nota además que la operación de E/S son asíncrono en la naturaleza y muy dependiente de la carga del sistema + también agrava la red retrasa & pérdidas, no se puede confiar en el mensaje ordenando entre conexiones TCP.
¿Qué quiere decir con _between_ conexiones TCP? – simplename
TCP "garantiza" que un receptor recibirá el flujo reconstituido de bytes tal como fue enviado originalmente por el emisor. Sin embargo, entre los puntos finales de envío/recepción de TCP (es decir, la red física), los datos se pueden recibir desordenados, se pueden fragmentar, se pueden dañar e incluso se pueden perder. El TCP da cuenta de estos problemas usando un mecanismo de saludo que hace que los paquetes defectuosos sean retransmitidos. La pila TCP en el receptor coloca estos paquetes en el orden en que se transmitieron, de modo que cuando lee desde su socket TCP, recibe los datos tal como se enviaron originalmente.
Cuando llama al método doRead en Twisted, los datos se leen desde el socket hasta el tamaño del búfer. Esta información puede representar un solo mensaje, un mensaje parcial o múltiples mensajes. Depende de usted extraer los mensajes del búfer, pero se le garantiza que los bytes están en su orden transmitido en este punto.
Lo siento por enturbiar las aguas con mi anterior post ...
revisa tu respuesta ya que estás muy equivocado. La API expuesta por TCP es en gran medida una transmisión con entrega ordenada por bytes. Se refiere aquí al método de transporte subyacente (es decir, paquetes) que, por supuesto, no está garantizado que lleguen en orden. – jldupont
Para su información, la "capa de servidor" para TCP es IP, que por supuesto es "sin conexión" y no garantiza la entrega de pedidos de paquetes. – jldupont
Tiene razón. Lo aclararé Gracias. –
- 1. orden de semáforo garantizado?
- 2. ¿El orden de un arraylist está garantizado en C# .NET?
- 3. ¿El orden de una matriz asociativa está garantizado en PHP?
- 4. ¿El orden de inicialización está garantizado por la norma?
- 5. ¿INSERT RETURNING está garantizado para devolver las cosas en el orden "correcto"?
- 6. COALESCE: ¿está garantizado un cortocircuito?
- 7. ¿El método de extensión LINQ está garantizado para conservar el orden?
- 8. ¿Está garantizado que foreach iterará en el orden de matriz en php?
- 9. ¿Está garantizado que std :: cout esté inicializado?
- 10. ¿Está garantizado el orden de operaciones de izquierda a derecha en Java?
- 11. ¿Está garantizado el orden de un diccionario de Python en las iteraciones?
- 12. ¿Está garantizado el orden de las ENTRADAS en un POST para las entradas de matriz en PHP?
- 13. Está estático inicializado inmodificableCollection.get garantizado inmutable?
- 14. ¿Está garantizado el orden de clave de NSDictionary igual que el inicializado si nunca cambia?
- 15. ¿Está garantizado el orden de los resultados provenientes de una lista de comprensión?
- 16. Como llegar los elementos en el orden correcto de iterador()
- 17. ¿Está garantizado que "(flotante) entero == entero" será igual en C#?
- 18. ¿Está garantizado que la declaración foreach de .NET itere una colección en el mismo orden en el que se creó?
- 19. ¿Está garantizado que el iterador .each en ruby siempre da el mismo orden en los mismos elementos cada vez?
- 20. son varios enlaces ninject garantizado para mantener su orden de enlace
- 21. ¿Este código está garantizado por el estándar C?
- 22. ¿Está garantizado que el puntero sea> cierto valor?
- 23. ¿Está garantizado que args [0] sea la ruta de ejecución?
- 24. Evaluación de declaración de cortocircuito: ¿está garantizado? [C#]
- 25. ¿Está garantizado que un servicio de android llama a Destroy()?
- 26. Spring Security: método no está garantizado con @PreAuthorize anotación
- 27. ¿El orden de iteración a través de std :: map es conocido (y está garantizado por el estándar)?
- 28. ¿Pueden los mensajes de websocket llegar fuera de orden?
- 29. ¿Está garantizada la orden de enumeración for-loop de NSArray?
- 30. El canal 'tcp' ya está registrado
Desde TCP tiene ni idea de dónde están sus mensajes comienzan o terminan, ¿cómo sería posible cambiar el orden de ellos, incluso si quisiera? –