1. ホーム
  2. パイソン

エラーで画像を送信する ConnectionResetError: [Errno 104] 相手によって接続がリセットされた

2022-02-27 23:38:52
<パス

環境

ウブントゥ 20.04
パイソン3.6
django 2.2

この理由は、私がウェブで検索したところ、いくつかあります。

  1. サーバーへの同時接続数がサーバーの容量を超えると、サーバーはそれらの接続の一部を遮断します。実際にサーバーに接続している同時接続クライアント数がサーバーの容量を超えないことがわかっている場合、ウイルスまたはトロイの木馬が原因で異常なネットワークトラフィックが発生している可能性があります。netstat -anを使用して、ネットワーク接続を確認することができます。
  2. サーバーからクライアントへのデータ送信中に、クライアントがブラウザを閉じた。
  3. ブラウザ側で停止を押した場合。いずれも一般的にはサーバーに影響はない。しかし、例外メッセージを具体的に処理しないと、サーバーのログファイルに例外が繰り返し記録され、サーバーのログファイルが大きくなりすぎて、サーバーの運用に影響を与える可能性があります。try...catchを使って例外を発生させた部分だけキャッチし、何も出力しないかヒントメッセージだけを出力することで、e.printStackTrace();を使ってすべての例外情報を出力することを回避することが可能です。
  4. ファイアウォールの問題、ファイアウォールを介してネットワーク接続、およびファイアウォールは、一般的にタイムアウト機構を持っている場合、ネットワーク接続は、長い時間のためにデータを転送しない場合、それはこのTCPセッションを閉じます、読み取りと書き込みで閉じた後、それは例外につながる。ファイアウォールを閉じると問題が解決する場合は、ファイアウォールを再構成する必要があります、またはTCPロング接続を実装するために独自のプログラムを記述します。TCPロングコネクションを実装するには、独自のハートビートプロトコルを定義し、たまにハートビートプロトコルを送信し、双方が接続を維持する必要があります。

ソリューションのある場所

例外の発生を利用する
エラーが頻繁に要求される場合は、しばらくスリープさせてみてください

私の質問

フロントエンドに画像ファイルを送信すると、接続が切断されたというエラーが発生します。調べてみると、リクエストヘッダのファイルサイズと実際のファイルサイズが違っていて、クライアントは終了してしまうのですが、サーバーはまだデータを送っていて、接続が切れていることが2つ目の問題です。

response['Content-Type'] = file_type
response['Content-Disposition'] = 'inline;filename=%s' % the_file_name
# The length of the file
response['content-length'] = size