[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Статичные переменные
multik
Здравствуйте.

Уже ни один раз жалел, что на стороне сервера нельза сохранить какие-нить свои перменные. Например: соединение с БД можно хранить в одной статичной пременной и при каждом запросе клиентов не создавать это соединение по новой, а использовать уже готовое соединение.

Вопрос. Есть ли такая возможость в php?



Спустя 7 минут, 55 секунд (2.07.2010 - 09:31) linker написал(а):
В случае БД mysql_pconnect(), для других случаев подойдет Shared memory или Messages queue.

Спустя 1 минута, 25 секунд (2.07.2010 - 09:33) Basili4 написал(а):
можно еще как 2 вариата 1. Файлы 2 БД. Выбираете какой Вам более по душе.

Спустя 3 минуты, 32 секунды (2.07.2010 - 09:36) multik написал(а):
mysql_pconnect() - это для одного клиента сойдет в момент выполнения скрипта, где подключение исспользуется много раз. А если много клиентов юзают один и тот же скрипт? Было бы лучше не для каждого mysql_pconnect делать, а для всех один раз.

Shared memory - в винде не работает, а я стараюсь писать всё кросплатформенно.

Messages queue - это очередь асинхронных сообщений, на которые могут подписываться много подписчиков. И как здесь по вашему сохранить переменную для её многократного использования многими клиентами?

Спустя 7 минут, 44 секунды (2.07.2010 - 09:44) multik написал(а):
Цитата (Basili4 @ 2.07.2010 - 06:33)
можно еще как 2 вариата 1. Файлы 2 БД. Выбираете какой Вам более по душе.

Работа с файлами будет едва ли быстрее чем просто постоянно создавать нужную переменную.
Работа с БД? Это конечно не то.

Вот вам небольшая информация: при создании подключения к БД теряется от 40мс до 80мс. Если нагрузка на скрипт довольно большая (много разных клиентов), то для увеличения быстродействия можно было бы хранить в памяти на стороне сервера одно подключение и затраты на создание подключения для каждого клиента при каждом запросы свелись бы к минимуму. Ещё лучший вариант - хранить не одно, а много подключений, т.е. пул соединений, дабы всем клиентам хвватало.

В ASP возможность хранения статичных пременных на стороне сервера есть, а в PHP получается нету?

Спустя 1 минута, 22 секунды (2.07.2010 - 09:45) linker написал(а):
multik
Цитата
это для одного клиента сойдет в момент выполнения скрипта, где подключение используется много раз.

эээ, не заблуждайтесь. Один раз коннект открылся и таким и остается и все клиенты его будут пользовать.
Для Messages queue точно также как и в случае с Shared memory.

Спустя 3 минуты, 14 секунд (2.07.2010 - 09:49) multik написал(а):
Например в ASP следующий код:


public static class MyStatic {
public static string x = "hallo word";
}

для всех клиентов по обращению MyStatic.x даст "hallo word". В php я обнаружил, что такой код тоже будет работать, но только во время выполнения запроса. При следующем запросы нужно опять инициализировать статические переменные.


Спустя 4 минуты, 29 секунд (2.07.2010 - 09:53) multik написал(а):
Цитата (linker @ 2.07.2010 - 06:45)
эээ, не заблуждайтесь. Один раз коннект открылся и таким и остается и все клиенты его будут пользовать.

Да, что-то я пропустил этот факт. Ну да ладно, соединения с БД я взял как пример. Важна сама возможность, есть она или нет. Не важно что должно сохраняться.

Спустя 2 минуты, 42 секунды (2.07.2010 - 09:56) multik написал(а):
Apache ActiveMQ - один из многочисленных примеров реализации Mesage Queue. Под винду тоже идет. Но скажите мне - причем здесь статические серверные переменные?

Спустя 5 минут, 8 секунд (2.07.2010 - 10:01) sergeiss написал(а):
Цитата (multik @ 2.07.2010 - 10:23)
Уже ни один раз жалел, что на стороне сервера нельза сохранить какие-нить свои переменные.

Не то, чтобы совсем уж нельзя smile.gif Можно. Но у них есть определенная продолжительность жизни, достаточно небольшая. И называется эта фигня "сессия", а переменные - "переменные сессии".
Если ты хочешь оперативно передать данные из одного скрипта в другой, который запускается следом за первым, то сессия, возможно, решит твои проблемы.
Если же ты хочешь хотя бы через час (или позднее) получить эти данные, то тогда храни их где-нибудь, в файлах или в БД.

И еще. А куки, на клиентской стороне, не подходят? Что за задача-то?

Спустя 2 минуты, 7 секунд (2.07.2010 - 10:03) linker написал(а):
sergeiss, не, человеку нужно чтобы все пользователи брали данные из одной переменной, которая хранится на сервере, а куки и сессии рассчитаны тока на одного пользователя.

Спустя 4 минуты, 22 секунды (2.07.2010 - 10:07) sergeiss написал(а):
Цитата (linker @ 2.07.2010 - 11:03)
sergeiss, не, человеку нужно чтобы все пользователи брали данные из одной переменной, которая хранится на сервере...

Где это написано, что одна переменная на всех юзеров? Пример с БД не указывай.

Спустя 10 минут, 40 секунд (2.07.2010 - 10:18) Nikitian написал(а):
Ну как всегда порекомендую memcache

А так каждый новый запрос к серверу идёт самостоятельно и не связан с предыдущими. Для связывания используются сессии, а память очищается, даже в случае работы как php-cgi. Очистка памяти видимо делается для устранения последствий возможных утечек, хотя может есть и иные причины.

Спустя 25 секунд (2.07.2010 - 10:19) multik написал(а):
Ну хорошо. Пример значит такой: к linux'овой машине присоединено GSM-устройство, с которой можно отправлять SMS посредством PDU, я сдел web-сервис для отправки сообщений, но отправка занимает в среднем 5 сек, мне необходима хотя бы одна переменная, отвечающая за "занятость/не занятость" GSM-устройства. Хотелось бы иметь простую возможность хранения такой переменной (как ASP, т.е. GSMmodem.IsBusy).

Ну не с файлами же работать:(!

Спустя 4 минуты, 44 секунды (2.07.2010 - 10:23) Basili4 написал(а):
Цитата (multik @ 2.07.2010 - 11:19)
Ну не с файлами же работать:(!

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

Спустя 26 секунд (2.07.2010 - 10:24) multik написал(а):
Цитата (Nikitian @ 2.07.2010 - 07:18)
Ну как всегда порекомендую memcache

А так каждый новый запрос к серверу идёт самостоятельно и не связан с предыдущими. Для связывания используются сессии, а память очищается, даже в случае работы как php-cgi. Очистка памяти видимо делается для устранения последствий возможных утечек, хотя может есть и иные причины.

Вот это уже интересно, спасибо

Спустя 1 час, 26 минут, 39 секунд (2.07.2010 - 11:50) multik написал(а):
ASP как раз держит статичные переменные в оперативной памяти.

Спустя 4 часа, 4 минуты, 54 секунды (2.07.2010 - 15:55) multik написал(а):
Цитата (multik @ 2.07.2010 - 07:24)
Цитата (Nikitian @ 2.07.2010 - 07:18)
Ну как всегда порекомендую memcache

А так каждый новый запрос к серверу идёт самостоятельно и не связан с предыдущими. Для связывания используются сессии, а память очищается, даже в случае работы как php-cgi. Очистка памяти видимо делается для устранения последствий возможных утечек, хотя может есть и иные причины.

Вот это уже интересно, спасибо

Развернул memcached сервер, подключил модуль php_memcache к PHP. Все работает!!!

Всем рекомендую!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.