ajax — монго соединение в PHP сессии

В настоящее время я работаю над приложением, которое запускает Ajax примерно 4 раза в секунду. Файл PHP должен подключаться к MongoDB каждый раз, когда запускается Ajax. Иногда это приводит к установке дополнительных 3-х монго-соединений (согласно журналам сервера в реальном времени).
Как я должен установить одно соединение во время сеанса PHP без необходимости установки новых?

0

Решение

Количество соединений на самом деле не является проблемой. Драйверы фактически устанавливают пул соединений. В наборах реплик и сегментированных кластерах также есть административные соединения. Наличие нескольких подключений не проблема.

Зная немного о MongoDB, я не специалист по PHP. Но, насколько я знаю, в PHP нет переменных уровня приложения. Так что, на самом деле, нет способа сохранить соединение (пул) на уровне приложения.

Скорее всего, происходит то, что вы открываете соединение в php-файле, и по той или иной причине это соединение остается открытым сервером, поскольку к соединению по-прежнему прикреплен курсор на стороне сервера. Давайте назовем эти осиротевшие связи. Эти потерянные соединения разрываются сервером через 10 минут.

Предел соединений, которые может принимать экземпляр mongod / mongos, составляет 20.000. Так что вы можете использовать множество соединений. Тем не менее, вы должны убедиться, что вы либо исчерпали эти курсоры (после чего они срываются автоматически), либо удалили их вручную с помощью

$cursor->reset();

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

1

Другие решения

Ты не можешь Сессии записываются в файл, используя формат, аналогичный serialize()когда ваш скрипт выходит (или вызывает session_write_close()) — как таковые, они не могут хранить Объекты ресурсов PHP, такие как соединения с базой данных.

Если вы видите несколько соединений Mongo на запрос, вы, вероятно, не используете текущую версию расширения PHP MongoDB — текущие версии (1.3 или более поздние) автоматически объединяют соединения между запросами. Обновите драйвер до текущей версии, и дальнейшая работа не требуется.

1