![]() |
Socket server
Если socket server написан на Perl или PHP, который обрабатывает заросы, как заставить его работать постоянно?
|
Они не только обрабатывают запросы. Программа как программа. Работает на сервере.
|
как она постоянно работает, если это скрипт :confused: :confused: :confused: его же пользователь вызывает
|
CGI - Common Gateway Interface
Способ удалённо запускать программы. Хочешь - запускай сам, на сервере. |
Я говорю совершенно не про это, но я разобрался. :D :D :D
|
pomagi mne esli est sorsi socket servera na PHP
i raskazi kak ze zapuskaetsa atot server vet on kak sam skazal script a ia znau tolka chto skripti bezat poka uzer ih zaprachivaet...??? |
lizergil, сам научился, научи других. Коим образом сокет-сервер запускается в качестве сервиса на сервере.
И еще вопросик на тему: в Apache или PHP настраивать ничего не надо для работы XMLSocket? а то у меня вроде все коннектится, socket_accept проходит, а при чтении socket_read ничего не возвращает... в смысле, прочитанная строка пустая, что бы я туда не отправлял. Заранее спасибо. |
Дайте мне сокет-сервер на пхп, плз.
|
Можно заставить работать скрипт постоянно (пока его не выключит PHP из-за превышения максимального времени), но он по любому будет отдельный для каждого юзера.
2 Dr.OH Настраивать вроде ничего не надо, скорей всего просто читаешь не правильно. |
Вложений: 1
Nucer, а как происходит первоначальный запуск скрипта? Ведь надо, чтобы он слушал порт в момент захода первого пользователя и выгружался после ухода последнего.
как это сделать, где и что надо прописать? так, и теперь сам сервер, что именно я не правильно читаю? плиз, объясните как надо? |
во, классно, понакачали файл и ни одного комментария не оставили... жду комментариев по поводу "как правильно"
|
2Dr.OH
Цитата:
у меня: Apache 1.3.27 и PHP 4.3.0. Это ты брал с http://phpclub.net/ ? если нет, то вот кусок кода с чтением от туда Код:
if (FALSE === ($buf = socket_read ($msgsock, 2048))) { |
у меня стоит Apache2 и PHP5... в более ранних версиях функции socket_create и socket_close заменяются на просто create и close соответственно.
Спасибо за код, сейчас буду разбираться. И еще раз повторю вопросик #2. Как скрипт-то сам запускать? |
Цитата:
|
2Dr.OH
Цитата:
Что касается вопроса №2: Я делаю интернет-шахматы, по идее тот кто играет белыми должен запускать скрипт, потом сам подключаться к сокету и другой тоже. |
изменил socket_create на create, но теперь ошибка "Fatal error: Call to undefined function: create()"
Цитата:
Ты откуда брал инфу? Мне один знакомый посоветовал книгу "Flash&XML Руководство по разработке" Д.Джекобсон. говорит, что там подробно написано как всё сделать и есть коды севера на пхп. Ты нигде не видел такую? |
как ее убрать... в смысле в чем тогда прикол скрипта будет, если он ничего читать не будет?
Не, если кто-то сам запускает это не выход. Если это чат, то кто там запускать бует что-то? и какова гарантия, что этот, кто запускает не закроет скрипт в самое неподходящее время посреди работы? |
Во-первых, не какую строчку убирать не надо. Надо раскомментить php_sockets.dll (или типа того) в конфиге.
Во-вторых, сокеты на PHP не выполняют той функции, которую выполняют в серьёзных языках, так что нормальную клиент-серверную игру на PHP не сделаешь. |
строчку в extensions в php.ini для подключения php_sockets.dll я раскоментировал, иначе вообще ни одна функция не работала бы...
Оно просто обязано работать! Ведь как-то все эти функции при создания тестировались. для чего тогда во Flash'е целый класс создан XMLSocket, ведь не для крутизны, как-то он работать должен! я смотрел по темам, все говорили, "все, спасибо, я разобрался, все сделал" ну.. и как же все всё сделали??? |
только что прочитал как правильно передавать данные к скрипту.. в общем функция socket_read ожидает строку с последним нулевым символом. Чтобы это обойти надо либо его добавлять ко всем сообщениям, либо ставить в качестве третьего параметра к socket_read PHP_BINARY_READ (первый способ почему-то пока что не работает)
|
в общем я практически все сделал.. в смысле пишет и читает... единственное, что следует отметить чтение удалось реализовать только при помощи функции int socket_recv ( resource socket, string &buf, int len, int flags) с socket_read у меня отношения не сложились.
Дело за малым, как запускать скрипт в виде сервиса??? |
блин, ну что, никто не знает??? столько ... с этим скриптом, чтобы потом обломаться о самое простое??? heeeelp!
|
Да никак. Тем более ни один хостинг тебе не дал бы этого делать, даже если б можно было.
|
2Dr.OH
Я скачал пхп5. Можешь дать сервер, где нормально читается, плз. Попробуй обратиться к alex100 (он делал игру на сокетах) Я правда от него мало, что узнал. может тебя он лучше поймёт. Зайди в асю. |
Нашёл про запуск скриптов по времени:
Цитата:
|
Крон и служба - это абсолютно разные вещи.
|
Ну и что, что разные вещи.
Разве это не выход из положения? каждые n- секунд/минут прослушивать сокет? |
Ну и что, что работает. Ты собрался запускать свой скрипт на солокэйшене? Видел сколько на одно соединение оперативы нужно? Ещё раз говорю, не занимайтесь фигнёй, только зря время потратите. Хотя конечно, дело ваше. :)
|
Nucer, lf, полностью с стобой согласен, на народе чат делать бесполезно, но, ты знаешь, есть много других хостеров.
По поводу оперативки. Для этого используется функция sleep. У меня нагрузка на проц примерно 5% при 20 пользователях. Не знаю много это или мало, но вот у меня вот так. kazakov_gin Спасибо за поддержку. На сервере, который использую я есть CRON, т.е. скрипты такие можно ставить. Но это на крайний случай. У меня тут появилась одна идея. А что если сделать немного по другому. Т.е. заходит какой-то пользователь и при помощи, например, функции XML.sendAndLoad обращается к странице со скриптом. Ответа он естественно не получит, но это и не важно. Т.о. мы запускаем скрипт. Все остальные пользователи при заходе просто проверяют некий диапазон портов на "открытость", если все порты закрыты они выполняют sendAndLoad, если открыты происходит проверка на принадлежность порта (чтобы случайно не вломиться туда, куда не надо) и работают. Единственное, над чем надо еще подумать, как поддерживать порт в работоспособном состоянии. Т.е. если выходит пользователь, открывший порт и скрипт прекращает работу. Да, а сервер у меня обыкновенный - Apache 2.0.46-win32 с "одноименного" сайта. |
http://www.electrotank.com/electroserver/index.aspx
если кому интересно... |
Тут Dr.OH меня спрашивал "кто запустит сокет?". Оказывается проблема совсем не в этом,
а проблема в живучести сокета! Пусть kazakov_gin на меня не обижается, сам же прервал переписку, может и договорились бы до чего дельного. Мое видение проблемы (подвожу медленно): - пусть все без этих сокетов, тогда все сливают и получают инфу из хранилища, каждый своим экземпляром скрипта...вроде все нормально работает. - пусть теперь приспичило на сокетах, но проблема - тот кто затеял разговор утомился и пошел баеньки, а остальные ? а остальные уже без него (без сокета) никуда, начинай все сначала и целый кусок беседы в ведро! Дак я и говорю, что надо бы сохранять "базар", к примеру 20 последних сообщений где нибудь в хранилище, хоть в общей сесии, и тогда когда скрипт, родивший общий сокет, умрет, то другой скрипт, обнаружив это, родит нового сокета. Из такой картины, действительно, ставится под сомнение использование сокетов для чата, ведь все равно клиент получает инфу по собственному запросу...вот если бы сервер обновленную инфу ему, как в "пуш"-технологии сам впихивал, т.е. без запроса, тогда да, было бы здорово! |
Был я на http://www.electrotank.com/electroserver/index.aspx
хоть и слав в английском, но понял, что серверок ихний на джава работает, а где возьмем такого хостера...или все они за! только предложи...просвятите...плз. |
сервер с сылки я не стал устанавливать... руки до него не дошли. Зато я сделал, как хотел. Когда первый пользователь заходит, скрипт начинает работать, сокет открывается и работает до тех пор, пока от сокета не отсоединиться последний пользователь. Сейчас отлаживаю, пытаюсь сделать регистрацию, оформить дизайн и т.д. :) Все оказалось ооочень просто... даже никакой Cron не понадобился ;P
|
Извращение какое то этот электросервер. Серверную часть нужно делать на серьёзном языке, точно не на скриптовом.
|
2Dr.OH
Я за тебя очень рад! Дак может даш мне сервер, который нормально читает? 2Alex Моё решение проблемы с сохранением "базара" ;) : Все посты хранятся у каждого чувака, то есть, кто-то написал что-то, это что-то передалось всем кто в чате и добавилось к ним в тектовое поле к остальным постам. таким образом "в ведро" ничего не попадает, пока ты не закроешь чат. Может не очень понятно объяснил, когда сам до конца разберусь, сделаю чат и пошлю в исходники. А как ты предлагаешь его запустить? |
Вложений: 1
...лана, уговорили :)
открывается очень просто XML.sendAndLoad(server_name, "GET" или "POST") |
Я так и не понял, парни, чем дело то закончилось....
вроде была проблемка...и рассосалась...пшик и нету... мне бы так. |
2Dr.OH
благодарю. 2Alex И такое бывает :p |
...теперь дело за малым... заставить все это чудо работать на реальном сервере :(
|
У меня приходящие сообщения все большими буквами. как это исправить?
|
| Часовой пояс GMT +4, время: 04:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.