Справочная информация:
У меня есть страница, написанная на php, которая отправляет данные на другой сервер, например так:
$url = "example=data&to=show&the=format&im=using";
$client = stream_socket_client("<IP address and port>", $errno, $errorMessage);
fwrite($client, $url . "\n");
Сервер на принимающей стороне использует xinetd для запуска сценария, который выполняет фактическую обработку. Его конфиг выглядит так:
service b2b
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /bbj/bin/bbj
server_args = -c/samuel/config.daemon -q SS0B2R - system /tmp
groups = yes
disable = no
per_source = UNLIMITED
instances = UNLIMITED
flags = NODELAY KEEPALIVE
}
Вопрос: Допустим, есть какая-то катастрофа, как будто кто-то вытаскивает кабель Ethernet, возможно ли, чтобы скрипт получил только часть строки? То есть: example=data&to=sh
Дело не в xinetd, а в протоколе.
Если вы используете TCP, как stream_socket_client("tcp://www.example.com:80", $errno, ... everything is OK.
TCP — это надежная служба потоковой доставки, которая гарантирует, что все полученные байты будут идентичны отправленным байтам и в правильном порядке. Поскольку передача пакетов по многим сетям не является надежной, для гарантии надежности передачи пакетов используется метод, известный как положительное подтверждение с повторной передачей. Этот фундаментальный метод требует, чтобы получатель отвечал сообщением подтверждения при получении данных. Отправитель ведет учет каждого отправленного им пакета. Отправитель также поддерживает таймер с момента отправки пакета и повторно передает пакет, если время таймера истекает до подтверждения сообщения. Таймер необходим в случае, если пакет потерян или поврежден
Других решений пока нет …