Производительность сокетов и накладные расходы

#php #sockets

#php #сокеты

Вопрос:

Какой из этих двух вариантов подключения к сокету более эффективен в использовании с точки зрения повышения производительности и уменьшения накладных расходов?

семейство socket_connect или fsockopen?

Ответ №1:

Насколько я знаю, производительность практически одинакова, но результат подключения после инициализации отличается. Например, fsockopen() откроет соединение и сразу перейдет в LISTENING состояние, где socket_create() просто создаст соединение и socket_open() переведет его в LISTENING состояние.

Вы могли бы сказать: fsockopen() === socket_open(socket_create(), ADDRESS)

Кроме того, после того, как вы выполните socket_shutdown() и socket_close() , вы оставите соединение в TIME_WAIT состоянии, что заставит сокет ждать, пока принимающий конец сокета отключится, что может занять некоторое время.

В целом, там все то же самое, выберите тот, который вам больше нравится и лучше всего соответствует вашим намерениям. Если вы хотите предварительно создать все сокеты, но подключаться только через определенное время, используйте socket_create() , иначе используйте fsockopen() , так как это проще.

Если у вас есть свой собственный веб-сервер и вы не собираетесь распространять свой код, вы также можете взглянуть на cURL, который по сути такой же, как оба других варианта, но имеет больше встроенных средств защиты от сбоев.

Комментарии:

1. Спасибо, cURL поддерживает UDP-соединения?

2. Если вы хотите настроить UDP-соединения, я бы придерживался либо fsockopen, либо socket_open, поскольку cURL изначально разработан для определенных протоколов (таких как HTTP, FTP, TELNET и т.д.), А не для пользовательских данных.