Ручная запись PHP в socket_read () немного расплывчата, когда речь идет о том, сколько (если таковые имеются) внутренних буферов она выполняет. Учитывая, что вы передаете 1024 для длины, это указывает, что он должен возвращаться после получения не более 1024 байтов данных.
Отказ от ответственности: следующее - просто предположение, так как я не знаю внутренней реализации socket_read ().
Если функция socket_read () использует свой параметр длины в качестве подсказки для внутреннего размера буфера, вы можете столкнуться с плохой производительностью с небольшими пакетами UDP. Например, если socket_read () ожидает 1024 байта данных независимо от размера пакетов, если вы постоянно получаете 60-байтовые UDP-пакеты, потребуется некоторое время для заполнения буфера и возврата функции.
(Примечание: после просмотра поля «unread_bytes», упомянутого Тимом, похоже, что PHP сохраняет внутренние буферы, но не упоминает, насколько они велики или малы.)
В этом случае socket_read () будет возвращать большие порции данных после заполнения буферов, чтобы уменьшить потребление ресурсов обработки, но за счет более высокой задержки. Если вам нужны пакеты как можно раньше, возможно, подойдет установка поля меньшей длины. Это заставит socket_read () возвращаться раньше, хотя и за счет более частого выполнения вашего цикла. Также, если вы установите слишком низкую длину, ваш socket_read () может начать возвращать неполные пакеты, поэтому вам придется учитывать это в своем коде. (Если это имеет значение для вашей заявки, конечно.)