2017-07-14 9 views
0

私は実行中のSwiftサーバで若干再現性の問題があります。これはKituraを使用したマルチスレッドサーバーです。基本的なことは次のとおりです。サーバーが一定期間稼動した後、ダウンロード要求はクライアントからの再試行が必要です(通常は3回再試行)。クライアントからの試行により、サーバースレッドは終了しません。サーバー上で、ログに次のようなダウンロードの問題が表示されます。Swift Kitura Serverが一部のスレッドを終了しないのはなぜですか?

[INFO] REQUEST /DownloadFile: ABOUT TO END ... 

この要求は決して終了しません。

私のサーバー内の関連するフラグメント・コードは次のようになります。

ある
// <snip> 
    Log.info(message: "REQUEST \(request.urlURL.path): ABOUT TO END ...") 

    do { 
     try self.response.end() 
     Log.info(message: "REQUEST \(request.urlURL.path): STATUS CODE: \(response.statusCode)") 
    } catch (let error) { 
     Log.error(message: "Failed on `end` in failWithError: \(error.localizedDescription); HTTP status code: \(response.statusCode)") 
    } 

    Log.info(message: "REQUEST \(request.urlURL.path): COMPLETED") 
    // <snip> 

、サーバがはっきりend(Kitura法)への呼び出しにハングアップするようです。この問題は、最後の時間を思い付いた直前https://github.com/crspybits/SyncServerII/blob/master/Sources/Server/Setup/RequestHandler.swift#L105にも

を参照してください、私は私のサーバーログに次のように観測さ:

[2017-07-12T15:31:23.302Z] [ERROR] [HTTPServer.swift:194 listen(listenSocket:socketManager:)] Error accepting client connection: Error code: 5(0x5), ERROR: SSL_accept, code: 5, reason: DH lib 
[2017-07-12T15:31:23.604Z] [ERROR] [HTTPServer.swift:194 listen(listenSocket:socketManager:)] Error accepting client connection: Error code: 1(0x1), ERROR: SSL_accept, code: 1, reason: Could not determine error reason. 
[2017-07-12T15:31:23.995Z] [ERROR] [HTTPServer.swift:194 listen(listenSocket:socketManager:)] Error accepting client connection: Error code: 1(0x1), ERROR: SSL_accept, code: 1, reason: Could not determine error reason. 
[2017-07-12T15:40:32.941Z] [ERROR] [HTTPServer.swift:194 listen(listenSocket:socketManager:)] Error accepting client connection: Error code: 1(0x1), ERROR: SSL_accept, code: 1, reason: Could not determine error reason. 
[2017-07-12T15:42:43.000Z] [VERBOSE] [HTTPServerRequest.swift:215 parsingCompleted()] HTTP request from=139.162.78.135; proto=https; 
[INFO] REQUEST RECEIVED:/
[2017-07-12T16:32:38.479Z] [ERROR] [HTTPServer.swift:194 listen(listenSocket:socketManager:)] Error accepting client connection: Error code: 1(0x1), ERROR: SSL_accept, code: 1, reason: Could not determine error reason. 

私はこれは私がわからない感覚でどこから来ているかわかりません私のクライアントの1人がこれを生成している場合。私は明示的にサーバーに "/"を要求していません。 (私はときどき私のサーバーではないクライアントからの要求を見ることがあります - これはこれらの1つである可能性があります)。これらのログメッセージの1つを除き、すべて私のコードから直接ではなく、Kituraから来ていることに注意してください。私のログメッセージは[INFO] REQUEST RECEIVED: /です。

私が賭け人だった場合は、上記のエラーによってサーバーが状態になり、その後、このダウンロード/再試行動作が確認されます。

私の唯一の解決策は、サーバーを再起動することです。そこから問題は直ちに起こらない。

思考?

答えて

0

これは根本的な問題に対処するかどうかわかりませんが、単なる回避策ではあるが動作しているようです。質問に記載されているサーバーを使用して、私はKituraの組み込みSSLサポートを使用していました。私は今、NGINXをフロントエンドとして使用するように切り替え、KituraのSSLサポートを組み込みません。 NGINXはすべてのHTTPS/SSLの詳細を処理します。これを実行して(約1か月前)、その間にサーバーが稼働していたので、この質問ではnot terminatingの問題が報告されていません。他を見るhttps://github.com/crspybits/SyncServerII/issues/28

関連する問題