Как пользоваться сокетами?

  • Автор темы Автор темы nucer
  • Дата начала Дата начала
Sending and loading variables to and from a remote source

что за непроходимая тупость,ты про клиент-сервер почитал? почему просветления не наступило?

Сервер ничего не может сам по себе "передавать другим флэшкам",но "другие флэшки" могут опрашивать сервер на предмет новых данных.
 
ты хоть(про за грубость) хоть уписайся,но ничего не передашь, а вот во "флешке" можно устроить в цикле getUrl и периодически опрашивать сервер на предмет новых данных
Я так и делал до сих пор. А теперь нужен быстрый отклик на действия других юзеров. Но ведь нагрузка на сервер получается огромная: каждые секунд 10 от каждого юзера идёт запрос, и каждые 10 секунд PHP должен проверять, например, БД на предмет поступления данных от остальных. Этож геморно как.

-~{}~ 16.05.04 20:35:

Есть онлайн игры (на флэше в том числе), в которых почти моментально видны изменения. Скажешь там каждую секунду обращение к серверу?
 
ты понимаешь как работает HTTP ? сервер ничего не знает о клиентах,он получил запрос,тихо,скрипя стареньким винчестером,вежливо ответил и тихо помёр,чтобы знать всё о клиенте,нужно с ним постоянно держать связь (да ты можешь написать свой сервер и реализовать свой простенький протокол аля irc, для этого нужен доступ на сервере(вероятно рутовый),с которым клиенты будут постоянно держать связь,в этом случае "время отклика" ты уменьшить сможешь,но снизишь ли нагрузку на сервер? кол-во траффика(серверного и клиентов) ? )

по поводу данных в БД - можешь попробовать (если данных не "много") хранить их в Shared Memory

-~{}~ 16.05.04 20:45:

по поводу игр - приведи пример
 
А IP клиента и номера порта не достаточно чтобы установить с ним соединение?
 
а с чего ты взял, родной, что по тому порту, С которого пришел запрос, тебе кто-то будет отвечать?
И кто же?

это не говоря о том, что у любого нормального админа и продивинутого юзера все файрволлы зазвонят, что гадский хакер снаружи лезет
 
я чесно-чесно уже плакаю.
Рассказываю - вот сейчас у меня $_SERVER['REMOTE_ADDR'] = 'xxx.xx.xx.xx'; $_SERVER['REMOTE_PORT'] = 'xxxx'; ты же эти данные имел ввиду,правда?

ну так вот, чтобы "сервер" смог передать мне данные,без моего на то ведома(без лишних действий с моей стороны),у меня на машине должен быть установлен сервер,который слушает определенный порт ( $_SERVER['REMOTE_PORT'] никаким боком к этому не относиться - он не LISTEN)
Далее выясниться что даже если я заведу у себя на машине сервер который будет слушать порт xxxxx ,ты всё равно не сможешь к нему(серверу) приконектиться,потому что :
1) я за проксей
2) я за NAT-ом
3) да у меня firewall стоит
4) и на раутере тоже firewall стоит

Ну прям напасти какие,правда? Всё против тебя.
И как тут быть?
 
Так чего, я могу со спокойной совестью делать вышеописанным способом, не думая о том что там всё лагает жутко?
 
скажем так - у тебя выхода другого нету.
Оптимизируй базу,скрипты .. попробуй данные которые нужно передавать клиентам хранить в SHM , чтобы не дёргать базу из-за одной строчки текста,тысячами коннектов...

-~{}~ 16.05.04 21:11:

З.Ы. я рад что ты начинаешь понимать что web не предназначен для подобных задач.
 
Ладно, тогда скоро здесь появиться тема про SharedMemory ;-)
 
такая же бессмысленная.
SharedMemory надо использовать не тогда, когда про нее случайно узнал, а когда она действительно нужна.

а когда "лагает жутко", надо выяснять - в каком именно месте. и это место оптимизировать
 
Можно со всеми клиентами держать постоянное HTTP-
соединение, тогда задержек не будет.
Вроде бы местный чат так сделан.
Но не все хостеры разрешают такое, у большинства
есть ограничение на время выполнения скрипта.
 
2 Игорёк Можешь поподробней рассказать об этом?
 
Можно со всеми клиентами держать постоянное HTTP-
соединение, тогда задержек не будет.
Вроде бы местный чат так сделан.
Но не все хостеры разрешают такое, у большинства
есть ограничение на время выполнения скрипта.

Держать соединение открытым не сложно - просто передать клиенту соответствующий заголовок Connection. Но вот только будет ли в этом смысл? Следующий запрос все так же приведет к выполнению всей работы. Здесь без демона не обойтись. Вот если бы на порту сидел сервер уже с готовым подключением к БД (или какие там еще средства используются), то каждый запрос клиента не сопровождался бы накладными расходами на коннект.
 
Автор оригинала: whirlwind
Держать соединение открытым не сложно - просто передать клиенту соответствующий заголовок Connection. Но вот только будет ли в этом смысл? Следующий запрос все так же приведет к выполнению всей работы. Здесь без демона не обойтись. Вот если бы на порту сидел сервер уже с готовым подключением к БД (или какие там еще средства используются), то каждый запрос клиента не сопровождался бы накладными расходами на коннект.
Автор оригинала: nucer
2 Игорёк Можешь поподробней рассказать об этом?
Я конечно сам этим не занимался, но теоретически никакой проблемы не вижу. Не знаю как это во flash делается, а на php/javascript можно было бы открыть два фрейма, в одном установить постоянное соединение, а во втором - соединение по запросу, ну и javascript'ами все разруливать. Вместо демона использовать циклический php-скрипт с неограниченным временем выполнения.

Надо поспрашивать у разработчиков чата, там примерно такая же задача стоит, они же ее как-то решили, зайди сюда:
http://php.spb.ru/chat/

Основной разработчик вроде DiMA.
 
Сверху