![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Viroman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
Здравствуйте дорогие форумчане!
У меня возник вопрос, необходимо между двумя запущенными скриптами создать обмен информацией. Каким образом это можно реализовать не прибегая к сокетам, поскольку на конечном сервере сокетные пхп соединения запрещены, и как это сделать не прибегая к обмену через файлы, и коль уже нельзя иначе, чем ререз файлы, как сделать так, чтобы скрипт реагировал только тогда, когда в файле новые данные поступили. Есть ли идеи реализации? Буду очень прекрайне благодарен за наводку. Далее вопрос номер два, скрипт подаёт данные на скачку, предположим какой нибудь файл, мне очень крайне важно контроллировать скорость этой передачи, чтобы та не превышала опеределённого значения заданного мною. Можно ли и это сделать? Именно скажем, чтобы данные не поступали быстрее одного байта в секунду, предположим. И за решение этой задачи буду прекрайне благодарен. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
вопрос об ограничении скорости отдачи вынеси в новую тему.
обсуждение двух вопросов в одной теме - это будет бардак. |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 0 Всего: 140 |
скрипты запущены на одном домене? или же вообще на разный хостинг-площадках? -------------------- Amazing ![]() |
|||
|
||||
nerezus |
|
||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
||||
|
|||||
Viroman |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
Да, они запущены на одном домене, даже лучше сказать, что это один и тот же скрипт запущенный двумя пользователями, как обменяться между ними информацией, если предположим у скриптов неограниченное время запуска.
Плохой совет, ещё идеи?
Но паузами будет ведь не совсем то, или? Какой это контроль за скоростью, если данные будут рывками передаваться, но с полной скоростью. |
||||||
|
|||||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Смотрите в область Семафоров и мютексов (этого в пхп нет, придется самому реализовывать). http://ru2.php.net/manual/en/book.shmop.php http://ru2.php.net/manual/en/book.sem.php Естественно работает только в пределах одного хостинга, я думаю, что даже и при одном пользователе. В PHP никак, т.к. доступ к другим ресурсам напрямую, как пямять, у PHP закрыт. Это сообщение отредактировал(а) Mal Hack - 25.7.2009, 14:15 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 1 Всего: 386 |
Viroman, О каких скоростях/реактивностях обмена информацией идет речь? Чем не устраивают простые реализации chat'ов?
Все, что немного посложнее/побыстрее/пореактивнее - требует открытых портов и отдельного гемороя с настройкой соответствующего софта. Для частной задачи общения специально подобранных юзеров можно написать Java аpplet, ActiveX или еще какую фенечку... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Viroman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
Ладно, фиг с ним со скоростью, не так страшно, если по байту отдавать на растяжении определённого времени. А вот обмен между скриптами нужно сделать не только для одного юзверя, а доступным для всех, как при случае записи в файл. Конечно можно постоянно чекать дату последнего изменения файла, но не будет ли это слишком накладно, если один и тот же скрипт запущенный тысячью пользователями будет проверять изменение какого либо файла, пусть хоть и не одного файла, а разного, но тем не менее.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Viroman, ksnk, вы мой пост видели?
|
|||
|
||||
Viroman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
Mal Hack, спасибо большое, буду разбираться, единственное что пока хотелось бы, это простите за наглость, именно пример такого использования. Я конечно понимаю, если самому велосипед изобретать, но надеялся на пример готовой реализации. Спасибо большое, я буду разбираться.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Примера дать не могу, т.к. сам такую реализацию на PHP не писал.
Глобально, смысл такой. Что юзайте shared memory по аналогии с общим файлом. Тут проблем быть не должно. Что касается симафоров и мьютексов, то тут надо "вкуривать". Неплохой пример объяснения что это вообще - тут: http://doc.trolltech.com/4.5/threads-semaphores.html, правда не на PHP. Про мьютексы тамже. |
|||
|
||||
xZ0RGx |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Скорость надо файрволлом шейпить, а не на PHP.
![]() А относительно обмена могу предложить только не лучший вариант с БД. |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Отличный совет. Решает сразу и второй вопрос.
Купить платный хостинг. Ограничить скорость на уровне системы. А вообще зависит от способа, которым Вы реализуете "общение" между процессами. Если у вас там, как говорите, тысячи клиентов онлайн - неужели не будет средств на выделенный сервер? Или Вы очередной халявщик, желающий сэкономить как можно больше копеек? Как вариант дешевого способа решения задачи (хотя не много не оптимального), могу посоветовать SOAP. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Автор теоретик просто.
Ну не знает, что нельзя 1k видео онлайн на фри хостинге сделать) |
|||
|
||||
Viroman |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
Ни первый, ни второй, никакой вопрос это не решает, у меня и так платный хостинг. Знаю, что его можно сменить, но я может это смогу сделать, а второй, третий жаждущий итп, нет.
Оголтелые советы и я умею также бездумно раздавать. Однако мне не факт, был задан вопрос, не было толкового ответа, просто всегда исхожу из того, что кто то о чём то может знает больше, чем я, а то что не сложилось иначе, реалии жизни однако. ![]()
Не вопрос, чем надо шейпить, а что возможно, надо будет, можно и копытами шейпить, однако не решение. Насчёт БД, вот представьте ситуёвину. Два физических клиента стучатся на внешний php скрипт(находящийся на одном и том же хостинге), стучатся они на неопределённое время, один стучится с намерением аплоадить, то есть посылает на вызванный скрипт нескончаемое количество информации, которая поступает время от времени(рывками, а может залпом, неважно, но постоянно, при этом максимальное время работы скрипта упускаем пока из виду, представим, что оно бесконечно), а другой наоборот, стучится к скрипту с намерением скачать с этого скрипта. Моя задача сконнектить этих двух индивидов так, чтобы у того, который информацию аплоадит, другой эту информацию забирал. По сути unixовые файл сокеты, это то, что нужно, то бишь мне не надо порт открывать(ибо как известно, их количество всё таки ограничено), и по сути можно совершать действия по мере поступления данных, то есть мне по сути не надо постоянно отпрашивать через скрипт, поступили ли новые данные или нет, за меня это сделает система, но загвоздка, даже платные хостинги не всегда любят сокетные соединения разрешать, вот поэтому и спрашивал, а что ещё возможно, может даже через обычные файлы, но с намёком на изменения в файле. Вот было названо очень умное решение с шарингом памяти, очень заслуживающее внимания идея, только как там реализовать сокетное поведение, чтобы скрипт забирал данные именно по мере их поступления, а не постоянно отпрашивал в цикле, а не поступили ли новые данные? В общем такие вот дела. Да, я знаю, что это мои теории, предположения, как лучше сделать, чтобы не изобретать велосипед по новой, но судя по всему сознание отвечающих ограничено фразами о покупке платного хостинга, толковые мысли тяжело выудить. |
||||||
|
|||||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
Viroman, расскажи подробнее про свой скрипт, что за данные передаются? Для чего все это?
как? Принимающий скрипт запуститься когда закачка завершена. Как внешний скрипт может узнать, имя файла назначения? Это задача из области прогресс бар закачки, которая (насколько я знаю) исключительно средствами php не решается (есть вариант патчить php и еще можно perl-скрипт использовать) |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Viroman, описанная Вами задача сильно напоминает онлайн-вещание. А столь оголтелые ответы Вы получили лишь потому, что реального вопроса толком не задали.
Для решения подобных задач существует множество проектов, однако, как организовать медиа-стриминг без использования сетевых технологий я не представляю. Или использовать модуль Nginx-a ![]() -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Viroman |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
1. Нет, принимающий скрипт запускается без ожидания, в этом то и фишка заключается. 2. Это не проблема, свой менеджер сессий это решит. 3. Прогресс бар мне за даром не нужен ![]()
Я задал вопрос в корень, отмёл уже существующие возможности и прибавил свойство существующего окружения, в какой то мере это может на стриминг похоже, но это мне дефакто не нужно, мне всего лишь хотелось знать, можно ли между двумя запущенными скриптами на сервере без сокетов обмениваться информацией в реальном времени так, чтобы один скрипт забирал данные по мере их поступения, и всё. Конечно, я бы мог сделать так для худшего случая, например, один скрипт получает данные, предположим по килобайту и пишет их в файл, например, получил 1кб, записал в файл, ждёт, пока другой заберёт, другой смотрит последнюю дату изменения с последнего отпроса, если видит, что что то изменилось, считывает и обнуляет, и такая игра по новой. Естественно, я должен буду для такого случая в цикле отпрашивать состояния файлов, как же иначе. И вот этого мне хотелось бы избежать. Понимаю, что говорите, что никто не знает, ну раз нет, то нет, тогда тему можно закрывать. Любые другие склоки на тему, что типа не так вопрос задал, не так мы поняли, меня честно, не волнует, раз с первого раза до кого то не дошло, значит просто тот с этой проблемой не сталкивался, тогда и отвечать не стоит. |
||||
|
|||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
принимающий скрипт не может по умолчанию запуститься без ожидания. Но тебе привели три варианта решения этой проблемы, а ты, возможно, придумал четвертое напиши функцию read, которая будет это делать. А потом забудь про ее реализацию. Как ты этого избежать хочешь. При передаче через сокеты ожиданий нету что ли? p.s. мы так и будем решать сферическую проблему в вакууме или ты расскажешь все-таки, что ты делаешь? |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Viroman, я полагаю, основная проблема при реализации данной задачи - состояние ожидания данных. Решить этот вопрос использованием функции sleep выглядит неподобающим образом, а другого способа, честно говоря, я не вижу/не знаю.
Думаю, это основная проблема, которую стандартными средствами PHP не решить. И все же, можно не совсем скромный вопрос? Неужели 150 рублей в месяц (за хостинг с socket on), такая нереальная сумма? -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
WIPS |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 22.5.2006 Где: Украина, Киев Репутация: нет Всего: 8 |
Тоже может быть не разрешено на хостинге, но можно еще посмотреть в сторону кешеров, кот. работают с памятью - APC/XCache. Такой себе аналог shared memory.
--------------------
Автопроизводители, машины, марки, модели! |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Или так низко ценим свой труд, что за разницу в 150р готовы писать куеву хучу кода? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
если я правильно понял, то тут можно придумать:
на 2 хостингах создать каталог вход и выход, в них файлы в которых записывать время передачи и т.д. или в 2 файлах записвать и парсить их.. UPDATE::bla::3434534345 INSERT::bla2::234234234 или в XML чтобы 2 скрипта скачивали через 2-4 сек файлы друг у друга (смотря что они делают) и смотреть что передается, дальше думаю понятно... как обычные сокеты... на низкоуровневом программировании прейдется поработать ![]() Это сообщение отредактировал(а) gcc - 5.8.2009, 23:25 |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |