qbit/core/src/main/java/io/advantageous/qbit/proxy/ProxyServiceImpl.java
private void trackTimeouts() {
        new ArrayList<>(httpRequestHolderList).forEach(httpRequestHolder -> {

            /* If it is handled then remove it from the list. */
            if (httpRequestHolder.request.isHandled()) {
                httpRequestHolderList.remove(httpRequestHolder);
                return;
            }

            /* Get the duration that this request has been around. */
            final long duration = time - httpRequestHolder.startTime;

            /* See if the duration is greater than the timeout time. */
            if (duration > timeOutIntervalMS) {

                /* If we timed out, mark the request as handled, and then notify the client that the
                backend timed out.
                 */
                httpRequestHolder.request.handled();

                /* Tell client that the backend timed out. */
                httpRequestHolder.request.getReceiver().timeoutWithMessage(String.format("\"TIMEOUT %s %s %s\"",
                        httpRequestHolder.request.address(),
                        httpRequestHolder.request.getRemoteAddress(),
                        httpRequestHolder.startTime
                ));

                /* If we timed out then remove this from the list. */
                httpRequestHolderList.remove(httpRequestHolder); //Not very fast if you a lot of outstanding requests
            }
        });
    }
private void trackTimeouts() {
        new ArrayList<>(httpRequestHolderList).forEach(httpRequestHolder -> {

            /* If it is handled then remove it from the list. */
            if (httpRequestHolder.request.isHandled()) {
                httpRequestHolderList.remove(httpRequestHolder);
                return;
            }

            /* Get the duration that this request has been around. */
            final long duration = time - httpRequestHolder.startTime;

            /* See if the duration is greater than the timeout time. */
            if (duration > timeOutIntervalMS) {

                /* If we timed out, mark the request as handled, and then notify the client that the
                backend timed out.
                 */
                httpRequestHolder.request.handled();

                /* Tell client that the backend timed out. */
                httpRequestHolder.request.getReceiver().timeoutWithMessage(String.format("\"TIMEOUT %s %s %s\"",
                        httpRequestHolder.request.address(),
                        httpRequestHolder.request.getRemoteAddress(),
                        httpRequestHolder.startTime
                ));

                /* If we timed out then remove this from the list. */
                httpRequestHolderList.remove(httpRequestHolder); //Not very fast if you a lot of outstanding requests
            }
        });
    }
Tracks timeouts periodically if timeout tracking is enabled.