#php #sockets
#php #сокеты
Вопрос:
Какой из этих двух вариантов подключения к сокету более эффективен в использовании с точки зрения повышения производительности и уменьшения накладных расходов?
Ответ №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 и т.д.), А не для пользовательских данных.