схема клиент-сервер - подводим итоги

korvin0

моська
схема клиент-сервер - подводим итоги

Итак, как неоднократно говорил на форуме, схема чата такова:
На сервере висит запущенный все время демон, принимающий сообщения, отправляющий их и вообще следящий за коннектом с чаттерами. Все это реализуется с помощью функций socket*? Если да, то какими именно функциями? Читал, что они пашут только под Linux. Это так?
Еще: Сначала клиент и сервер соедининяются (кстати, по какому порту?), т.е. клиент при входе в чат посылает сообщение типа "я тут". После этого сервер (а точнее демон) при появлении новых сообщений посылает клиенту эти сообщения. Как он это делает? По какому порту? Кто принимает сообщения на стороне клиента? Неужели javascript?
P.S. А вообще давно пора делать отдельную тему про все это в избранном, т.к. тема чата, а значит и схема "клиент-сервер" необычайно популярна (при поиске по слову "чат" - 1002 тем!)
 

Profic

just Profic (PHP5 BetaTeam)
Ех. Если это не попадет в избранное то я повешусь :)

Про клиент-сервер:
Есть клиент и есть сервер. Клиент соединятся с сервером сидящем на определенном порту. Порт - от балды. Для распространенных сервисов порты стандартны. Клиент общается с сервером по определенному протоколу, который понимает сервер и клиент.
Это что-то типа теории :)
Про чат:
На сервере сидит демон, который управляет всеми чатерами. Клиент (стандартный браузер) соединяется с этим демоном (по протоколу HTTP) и получает непрерывным потоком новые сообщения. Браузер также посылает формы с новыми сообщениями серверу (отдельным коннектом и опять же по HTTP) или php скриптам (и тут HTTP :)), которые передают сообщение самому демону (а тут протокол может быть любой, верне его вообще может не быть :)).
Вот и все - простая для понимания схема работы чата с непрерывной загрузкой. Как это все устроено внутри не рассмотриваем, т.к. это уже реализация.

Реализуется это все (серверные соединения) с помощью семейства функций из экстеншена socket. Какие именно - в примерах они почти все есть.
 

Profic

just Profic (PHP5 BetaTeam)
Нет. Блин. Он не рассоединяется с ним. Вообще. Т.е. демон не закрывает соединения, а постоянно пишеь туда сообщения.

В конце концов посмотри как это работает в димином чате http://chat.php.spb.ru
 

korvin0

моська
Profic
Я думаю слова "все время" подразумевают, что никто не с кем не рассоединяется.
 

Profic

just Profic (PHP5 BetaTeam)
Слова "всё время" подразумевают именно то что они подразумевают :)
В отдельном фрейме все время идет загрузка скрипта, который и передает все данные демону?
Как передавать? Какому демону? От демона браузер непрерывным потоком только сообщения может получать.
Т.е. браузер послал заголовки, демон послал заголовки и стал пихать сообщения в браузер, который их по мере постуления и отображает. В том самом фрейме, который и служит для отображения сообщений. Что еще тут может быть непонятно?
 

chisto_tolyan

Враг народа
Непонятно тока то как эти сообщения отправлять, всмысле какте функции как писать) В мане есть,но там чето не то)Вобщем я видать неврубаюс в ети сокеты) Не могу бы ктонить на пальцах показать как ето делать(передавать сообщения от демноа браузеру)?)
 

IL78

Guest
А мне вот непонятно следующее:

1) Сколько экземпляров демона висит в памяти сервера? Если один, как организовать раздачу выводимых данных всей толпе чатеров? Если по одному на каждого из нескольких сот клиентов, как сервер это выдержит?

2)
Браузер также посылает формы с новыми сообщениями серверу (отдельным коннектом)
т.е. использование фреймов или чего-то подобного неизбежно?

3) Каковы перспективы схемы
демон не закрывает соединения, а постоянно пишет туда сообщения
в safe-mode?
 

chisto_tolyan

Враг народа
И еще я так понимаю надо будет писать клиент-скрипт. Ведь демон посылает всем одни и те же сообщения, а клиент уже будет распределять их на общие,личные,приватные и тп.

И еще вопрос какими заголовками должны обмениватса клиент с браузером чтоб выводились сообщения?
 

Rezec

По пиву? (socket80)
На клиентской стороне обычно пишут на java || flash.
 

IL78

Guest
Ведь демон посылает всем одни и те же сообщения, а клиент уже будет распределять их на общие,личные,приватные
chisto_tolyan, зачем? Сервер сам прекрасно поймет, кому что писать. Вовсе не обязательно, что всем он пишет одно и то же.
 

Rezec

По пиву? (socket80)
- во флаше есть xml socket
- в java апплетах еще больше возможностей

lucas - это ты на фото? Сурьёзный мущщина
 

lucas

Guest
socket80
На клиентской стороне обычно пишут на java || flash.
Ключевое слово я выделил.
Сравнение количества чатов на java-апплетах и чатов с использованием javascript'а тебе предлагается произвести самостоятельно.
 

chisto_tolyan

Враг народа
А вот КАК ету самую серверную(да и клиентскую часть писать) то и не совсем понятно. Как чат работает уже понятно(и слава богу))) а как это все реализовать не совсем понятно( Может кто поможет?)
 
Сверху