2010-08-19 20 views
1

J'utilise twisted pour implémenter un client et un serveur. J'ai configuré RPC entre le client et le serveur. Donc, sur le client, je fais protocol.REQUEST_UPDATE_STATS(stats), ce qui se traduit par l'envoi d'un message avec transport.write sur le transport du client qui est une version codée de ["update_stats", stats]. Lorsque le serveur reçoit ce message, la fonction dataReceived sur le protocole du serveur est appelée, il le décode et appelle une fonction basée sur le message, comme CMD_UPDATE_STATS(stats) dans ce cas.Les RPC torsadés sont-ils garantis dans l'ordre?

Si, sur le client, je fais quelque chose comme:

protocol.REQUEST_UPDATE_STATS("stats1") 
protocol.REQUEST_UPDATE_STATS("stats2") 

... suis-je assuré que le message "stats1" arrive avant que le message "stats2" sur le serveur?

MISE À JOUR: Edité pour plus de clarté. Mais maintenant la réponse semble évidente - pas question.

+0

Qu'est-ce qu'un "RPC"? Voulez-vous dire un message réseau? Utilisez-vous des sockets TCP ou UDP? Est-ce que les différents messages passent par le même socket, ou différents? Votre protocole permet-il des réponses asynchrones? Y a-t-il un logiciel intermédiaire qui pourrait réorganiser les demandes? Vous devrez être beaucoup plus spécifique si vous voulez une réponse correcte au lieu d'une simple supposition qui peut ne pas s'appliquer dans votre situation. – Glyph

Répondre

1

Ils arriveront dans l'ordre où la demande est reçue par le processus Python. Cela inclut le temps d'établissement de la connexion plus les paquets contenant les données de la demande. Donc non, cela ne garantit pas l'ordre d'envoi de la requête par les processus d'envoi, en raison de la latence du réseau, des paquets abandonnés, de la mise en file d'attente des paquets côté expéditeur, etc.

Mais oui, en général, vous pouvez compter sur leur livraison dans l'ordre tant qu'ils sont séparés par un temps relativement long (100 ms sur Internet).

+2

Vous pouvez compter sur leur envoi * dans l'ordre. Peut être. Selon le type de transport que vous utilisez, etc. Comme le dit le zen de Python: "Face à l'ambiguïté, refusez la tentation de deviner.". Cette question est très ambiguë et vous ne devriez vraiment pas y répondre tant que le demandeur n'a pas fourni plus d'informations :). – Glyph