public function send($request, $future, $id, $context, $conn)
{
$self = $this;
$timeout = $context->timeout;
if ($timeout > 0) {
$conn->timeoutIds[$id] = swoole_timer_after($timeout, function () use($self, $future, $id, $conn) {
$self->clean($conn, $id);
if ($conn->count === 0) {
$self->recycle($conn);
}
$future->reject(new TimeoutException('timeout'));
});
}
$conn->count++;
$conn->futures[$id] = $future;
$header = pack('NN', strlen($request) | 0x80000000, $id);
$conn->send($header);
$conn->send($request);
$this->sendNext($conn);
}