私はTwistedに基づいてサーバー側のクライアント/サーバーソリューションを実装しています。クライアント側のAndroid携帯電話などがあります。 Andoirdエミュレータは1500b(またはそれ以下)より大きなTCPパケットを受け取らないので、サーバー側でパケットをチャンクできる必要があります。各 "transport.write"の後でソケットをフラッシュすることなく、Twistedは送信データをバッファリングして、何らかのマニュアルまたは自動フラッシュ/ maxpacketsize機能なしにチャンクが役に立たないようにします。 Twistedでこれをどうやってやるの? 私は "reactor.doSelect(1)"関数に精通していますが、スケーラビリティとパフォーマンス上の理由からEPollリアクタを使用しているため、doSelectは使用できません。 Twisted内の特定の接続のmaxPacketValueを変更することは可能ですか?Twisted Python:最大パケットサイズ?ソケットをフラッシュしますか?
2
A
答えて
1
TCPパケットが自動的にOSによってチャンクされている...誰かが私に光を示すことができることを期待して、行うことができますすべてのアプリケーションは、いつフラッシュするためにヒントを与えるです。それとは別に、アプリケーションは単にストリームを読み書きできます。
通信中の2つのピアのOSは、リンク上のMTUに基づいて最大パケットサイズを自動的に設定します(Path MTU discovery)。それが動作するようにICMPパケットをブロックしないようにしてください。
MTUが間違っている(とにかく1500以下のMTUが設定されることが多い)可能性は非常に低いので、たとえばwiresharkなどのパケットトレーサを使用して問題を再診断する必要があります。
2
TCPはストリーム指向のプロトコルであり、パケット指向のプロトコルではありません。 transport.write
に電話すると、そのデータはTCPストリームに追加され、任意の数のパケットで送信されます。それは、壊れているか、またはwrite
への次回または前回の呼び出しと一緒に接着されている可能性があります。これはかなりfrequently asked question about Twistedですが、それを聞いた人は少し尋ねます。
AMPのようなプロトコル構成キット、または基本的にLineReceiverを使用して、パケット境界のランダムな性質に依存するのではなく、プロトコル内のメッセージを区切りたいとします。
関連する問題
- 1. 半径の最大パケットサイズ
- 2. Androidの最大UDPパケットサイズ
- 3. Pythonでソケットをフラッシュする
- 4. どのようにPythonソケットをフラッシュしますか?
- 5. Bitnami-Moodleの最大許容パケットサイズを増やす
- 6. AndroidでBluetooth経由でデータを送信する最大パケットサイズは?
- 7. scapy/pythonでパケットサイズを取得
- 8. Python Twisted sendLine()
- 9. Iron Python Twisted
- 10. Python Twisted WebSocketクライアント
- 11. Pythonで多次元の最小/最大を返しますか?
- 12. Twisted TCPソケットを作成してテスト値を送信する
- 13. python importerrorモジュールzope.interface twisted
- 14. Python - Twisted and Unit Tests
- 15. Python TwistedはwxPythonで動作しますか?
- 16. 大きなファイルをTwisted、FTP、 "streaming"する
- 17. Cで最大ソケット送信バッファサイズを照会していますか?
- 18. Socket.IO vs. Twisted
- 19. Node.js:ソケットをフラッシュする方法は?
- 20. コード内のソケットをフラッシュする方法
- 21. Python/Twisted IRCボットロギングの問題
- 22. twisted self.transport.write() - Python - 追加出力
- 23. Python Twistedとデータベース接続
- 24. キーボード入力は、stdio.StandardIOをtwisted pythonで使用しています
- 25. Python最大関数
- 26. UbuntuでPython-twisted 10.2をインストールする
- 27. Groovyソケットをフラッシュできない
- 28. PHPソケットは、待ち時間の最大値を定義します
- 29. Python Twistedプロトコルの登録が解除されていますか?
- 30. Python TwistedのXPATHはこの構文をサポートしていますか? "/message/body[.='test ']"?
これはあまりにも奇妙です。問題はちょうど魔法のように解決されました。クライアントに届かなかった大きなテストパケットは、今再び働きます、なぜ私は考えていません...今のところ私は、 ! – Dirk
決してdoSelectを呼び出すべきではありません。あなたが思うことはしません。 –
問題は魔法のようにそれ自体を解決しませんでした。あなたのネットワークの条件が変わったので、今は動作します。しかし、それは元に戻って、再び壊れるでしょう。実際のコードを修正する方法を説明する私の答えを見てください。 – Glyph