Способ поделиться возвращаемым значением fsockopen () между несколькими страницами? - PullRequest
1 голос
/ 25 апреля 2010

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

Другой вопрос, каково время ожидания fsockopen или соединение остается активным, если. оригинальный скрипт php который вызывал это закрыто?

EDIT: // У меня есть скрипт, который выполняется долгое время, так что было бы возможно оставить его открытым, но мой первоначальный вопрос, могу ли я поделиться дескриптором через $ _Session и если да, нужно ли его сериализовать? потому что, если я повторяю ручку, это не целое число

Ответы [ 2 ]

3 голосов
/ 25 апреля 2010

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

2 голосов
/ 25 апреля 2010

fsockopen открывает сетевой сокет.

Когда PHP-скрипт, открывший этот сокет, заканчивается, открытые им сокеты потеряны : вы не можете повторно использовать их из другого скрипта.

Если вы хотите, чтобы несколько сокетов использовали этот сокет, нет другого способа, кроме как повторно открыть его для каждого сценария, даже если это занимает время.


Другое (намного более сложное) решение может иметь:

  • один скрипт, который запускается как демон в фоновом режиме и подключается к удаленной службе
  • этот скрипт всегда выполняется (или, по крайней мере, долгое время)
  • другие скрипты отправляют информацию этому демону, вместо того, чтобы пытаться подключиться к сервису
  • и демон, который всегда подключен, отправляет эту информацию в удаленную службу, к которой он подключен

Это немного сложнее, как я уже сказал ... но должно работать довольно хорошо: -)

Обратите внимание, что при использовании демона и всего, что, вероятно, потребует от вас доступа к командной строке вашего сервера: вы не сможете (или не очень хорошо) все что если вы запускаете только PHP из Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...