ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਅਧੂਰੀਆਂ ਤਸਵੀਰਾਂ: Netty ਦੀ ਲਿਖਤ ਪੂਰੀ ਹੋਣ ਦੀ ਜਾਂਚ ਕਰੋ
ਜਦੋਂ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਤਸਵੀਰਾਂ ਅਧੂਰੀਆਂ ਆਉਂਦੀਆਂ ਹਨ, ਤਾਂ ਜਾਂਚੋ ਕਿ ਕੀ ਓਰੀਜਨ ਅਸਿੰਕ੍ਰੋਨਸ ਜਵਾਬ ਲਿਖਤ ਪੂਰੀ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣਾ Netty ਚੈਨਲ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ।
ਇੱਕ ਤਸਵੀਰ ਤੇਜ਼ ਸਿੱਧੇ ਕਨੈਕਸ਼ਨ 'ਤੇ ਕੰਮ ਕਰਦੀ ਹੈ, ਪਰ ਹੌਲੀ ਫਾਰਵਰਡ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਅਧੂਰੀ ਆਉਂਦੀ ਹੈ। ਇੱਕ ਸੰਭਾਵੀ ਕਾਰਨ ਇਹ ਹੈ ਕਿ ਓਰੀਜਨ ਕਨੈਕਸ਼ਨ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ ਜਦੋਂ ਇਸਦਾ ਜਵਾਬ ਅਜੇ ਲਿਖਿਆ ਜਾ ਰਿਹਾ ਹੁੰਦਾ ਹੈ।
Netty I/O ਅਸਿੰਕ੍ਰੋਨਸ ਹੈ। writeAndFlush ਤੋਂ ਵਾਪਸ ਆਉਣ ਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ ਉਹ ਕਾਰਵਾਈ ਪੂਰੀ ਹੋ ਗਈ। ਇਸ ਲਈ ਕਤਾਰ ਵਿੱਚ ਅਜੇ ਬਾਈਟ ਹੋਣ ਵਾਲੇ ਜਵਾਬ ਲਈ ਇਹ ਕ੍ਰਮ ਸੁਰੱਖਿਅਤ ਨਹੀਂ:
ctx.writeAndFlush(response);
ctx.close();
ਜਦੋਂ HTTP ਵਟਾਂਦਰਾ ਆਪਣੇ ਆਖਰੀ ਜਵਾਬ ਸੁਨੇਹੇ ਤੋਂ ਬਾਅਦ ਜਾਣ-ਬੁੱਝ ਕੇ ਬੰਦ ਹੋ ਰਿਹਾ ਹੋਵੇ, ਤਾਂ ਬੰਦ ਕਰਨ ਨੂੰ ਉਸ ਲਿਖਤ ਦੇ future ਨਾਲ ਜੋੜੋ:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
ਇਹ ਹਿੱਸਾ ਮੰਨਦਾ ਹੈ ਕਿ ਜਵਾਬ ਪਹਿਲਾਂ ਹੀ ਸਹੀ ਢੰਗ ਨਾਲ ਬਣਾਇਆ ਅਤੇ ਫਰੇਮ ਕੀਤਾ ਗਿਆ ਹੈ। ਸਟ੍ਰੀਮ ਕੀਤੇ ਬਾਡੀ ਲਈ ਹੈਡਰਾਂ ਦੀ ਲਿਖਤ ਨਹੀਂ, ਸਗੋਂ ਇਸਦੇ ਆਖਰੀ ਸੁਨੇਹੇ ਦੀ ਸਮਾਪਤੀ ਵਰਤੋ। ਸਥਾਈ HTTP ਕਨੈਕਸ਼ਨ ਲਈ, ਸਿਰਫ਼ ਜਵਾਬ ਖਤਮ ਹੋਣ ਕਰਕੇ ਬੰਦ ਨਾ ਜੋੜੋ।
ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਆਮ ਗਲਤੀ ਸੰਭਾਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ future ਦੀ ਅਸਫਲਤਾ ਦੀ ਜਾਂਚ ਕਰੋ। ਸਮਾਪਤੀ ਵਿੱਚ ਅਸਫਲਤਾ ਅਤੇ ਰੱਦ ਵੀ ਸ਼ਾਮਲ ਹਨ, ਇਸ ਲਈ ਸਿਰਫ਼ ਸਮਾਪਤੀ ਬ੍ਰਾਊਜ਼ਰ ਤੋਂ ਡਿਲੀਵਰੀ ਰਸੀਦ ਨਹੀਂ।
ਲਾਭਦਾਇਕ ਤੁਲਨਾ ਹਰ ਮਾਰਗ 'ਤੇ ਪੂਰੀ ਜਵਾਬ ਲੰਬਾਈ ਅਤੇ ਲਿਖਤ ਦਾ ਨਤੀਜਾ ਹੈ। ਪ੍ਰੌਕਸੀ ਸਮਾਂ ਕਾਫ਼ੀ ਬਦਲ ਸਕਦਾ ਹੈ ਜਿਸ ਨਾਲ ਮੌਜੂਦਾ ਜੀਵਨ ਚੱਕਰ ਗਲਤੀ ਸਾਹਮਣੇ ਆ ਜਾਵੇ; ਇਸਦੀ ਮੌਜੂਦਗੀ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰਦੀ ਕਿ ਇਸਦੇ ਕੰਪ੍ਰੈਸਰ ਜਾਂ ਕੈਸ਼ ਨੇ ਬਾਈਟ ਸੁੱਟ ਦਿੱਤੇ।