code: protected void handleRegularRequest(HttpServerExchange exchange, HttpObjectSocket httpObjectSocket, Object[] received, StreamSinkChannel sinkchannel) {
          ArrayList<IPromise> futures = new ArrayList<>();
          httpObjectSocket.getSink().receiveObject(received, futures, exchange.getRequestHeaders().getFirst("JWT") );
  
          Runnable reply = () -> {
              // piggy back outstanding lp messages, outstanding lp request is untouched
              Pair<byte[], Integer> nextQueuedMessage = httpObjectSocket.getNextQueuedMessage();
              byte response[] = nextQueuedMessage.getFirst();
              exchange.setResponseContentLength(response.length);
              if (response.length == 0) {
                  exchange.endExchange();
              } else {
                  httpObjectSocket.storeLPMessage(nextQueuedMessage.cdr(), response);
  
                  //FIXME: ASYNC !!!
                  long tim = System.nanoTime();
                  ByteBuffer responseBuf = ByteBuffer.wrap(response);
                  try {
                      while (responseBuf.remaining()>0) {
                          sinkchannel.write(responseBuf);
                      }
                  } catch (IOException e) {
                      Log.Warn(this,e);
                  }
  //                System.out.println("syncwrite time micros:"+(System.nanoTime()-tim)/1000);
                  exchange.endExchange();
              }
          };
          if ( futures == null || futures.size() == 0 ) {
              reply.run();
          } else {
              Actors.all((List) futures).timeoutIn(REQUEST_RESULTING_FUTURE_TIMEOUT).then( () -> {
                  reply.run();
              }).onTimeout( () -> reply.run() );
              sinkchannel.resumeWrites();
          }
      }
docs: handle a remote method call (not a long poll)
  
  @param exchange
  @param httpObjectSocket
  @param received
  @param sinkchannel