| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Как пишуться чаты? |
| Автор: DenWPF 25.10.2010, 22:41 |
| Это обязательно сервер - клиент. и сервер как то отсылает пакет клиенту? или можно черзе БД? к примеру MySql? |
| Автор: Экскалупатор 26.10.2010, 10:00 |
сервер знает своих клиентов или клиент опрашивает сервер периодически... как ты себе это представляешь? |
| Автор: DenWPF 26.10.2010, 11:43 | ||
"клиент опрашивает сервер периодически" |
| Автор: Экскалупатор 26.10.2010, 12:14 |
| ну ты в любом случае будешь опрашивать серверную часть приложения которая в свою очередь будет опрашивать БД. в принципе мне кажется не принципиально, тут нужно решить есть ли необходимость хранить всю историю твоего чата |
| Автор: Yagmort 26.10.2010, 14:58 |
| Почитай про создание модели данных. создай 2 таблицы одна хранит пользователей, другая сообщения и перенеси ее в MySQL, можешь впринцепе использовать дополнительный редактор для MySQL - MySQL Front, далее присоедени ее к языку прораммирования и напиши скрип проверки логина и пароля, и сохранние сообщений в БД. Лучше использовать связку языков HTML+JavaSript+PHP и поставь себе сервер на локальный компьютер, (Apatch), но лучше поставь Denver он автоматом настраивается, а на woweb.ru найди готовые скрипты для чата если не хочешь писать ручками... Вообщем для начинающего это геморой, а так ничего сложного. Удачи Добавлено @ 14:59 Если пишеш чат, то это будет тонкий клиент. А вообще логи чатов хранятся в .txt формате... так что лучше использовать его вместо СУБД |
| Автор: DenWPF 26.10.2010, 16:24 | ||
я ему про .net и десктоп а он мне про php. ты чего, не логи а история. Экскалупатор, ну в общем если мой клиент будет все все время спрашивать бд на запрос "дай мне те сообщения которые я не виде" - это будет нормально?? и грузить сильно будет? или так и делается? да, историю 100% надо хранить. даже скажу больше её надо пихнуть на сайт. |
| Автор: DenWPF 26.10.2010, 17:03 |
| так как это сделать на реально проекте? использовать сокеты? |
| Автор: Экскалупатор 26.10.2010, 19:58 | ||
я думаю не очень нормально, лучше наоборот. как мне кажется клиент должен просто периодически проверять соединение с сервером а остальное время ждать подключение к себе от сервера. но это имхо, потому как я никогда чатов не писал. просто думаю что если пользователей будет много то они за DDOS`ят сервер к чертям. |
| Автор: DenWPF 26.10.2010, 20:11 |
| спасибо, жду ответа от того кто имел дело с этим... Экскалупатор, я вообще так же думаю, но вот как это сделать не знаю. технология WPF |
| Автор: wester 26.10.2010, 22:04 |
| DenWPF, зачем ждать ? просто достаточно подумать, мои соображения (после 5 часов отладки в голове творится ужас, но все же) к серверу коннектится два клиента, один клиент отправляет сообщение на сервер. Сервер записывает его в БД, отправляет получателю , и ставит этому сообщению флаг "отправлено/доставлено получателю" и вот так в цикле. |
| Автор: DenWPF 26.10.2010, 22:33 |
| это ты не про чат, а про личную переписку. это легко решается чезрез простое mysql бд и запрос к ней.. |
| Автор: wester 26.10.2010, 22:40 |
| DenWPF, эмм... а по твоему чат это должно быть что - то большое и неповоротливое ? и вообще http://tinyurl.com/34pjkm8 |
| Автор: Экскалупатор 26.10.2010, 23:25 |
| что то я не пойму в чем у тебя возникли сложности. с архитектурой приложения? чем не подходит WCF? и по верх него все это запускать? как мне кажется должно быть как то так: клиент: соединяется с сервером и сообщает ему свои координаты для обратной связи(ну или сервер их сам узнает и сохраняет). можно добавить сообщения серверу об изменении своего статуса(отошел, не доступен и пр.) и ждет сообщения от сервера. время от времени подтверждает свой статус и проверяет доступность соединения с сервером. ну собсна получает и отправляет сообщения. наверное было бы не плохо что бы отправлял серверу подтверждение что сообщение принято, дабы сервер мог отметить у себя что все "ок". сервер: ждет подключения клиентов. сохраняет данные о них, для того что бы можно было обратиться к клиенту(ip/port). при получении сообщения отправляет его адресату и записывает лог, при получении ответа клиента, что принято сообщение, отмечает что отправлено. при подключении клиента должен проверить нет ли неотправленных сообщений, если есть то отправить. периодически проверять клиентов, что они все тут и не отпал ли кто из них без его ведома(можно по тайм ауту отбрасывать). данные о подключении хранить в виде: логин, адрес. когда получает сообщение то сопоставлять по логину адрес и отправлять адресату. ну как то так я себе представляю этот процесс. может чего не учел, так это только набросок, но мысль вроде ясна. Добавлено через 4 минуты и 43 секунды наличие БД, конечно все усложняет. как мне кажется чаты(аськи и иже с ними) логи не хранят на сервере. хранят у клиентов. но если у тебя стоит задача создать такой чат... то тут никуда не денешься, бери и прикручивай БД. это в любом случае будет лучше текстовых файлов. если учесть что работать все это будет по сети то думаю что задержку в 1-2 сек. никто не заметит. зато получишь удобное хранилище логов, с которым потом же удобно будет работать(тебе же для чего то эти логи нужны...). |
| Автор: DenWPF 26.10.2010, 23:36 |
| вот и трабл WCF - не работал так нам его и не дали=(( а серверами я работал только в java. и то сервер делал у себя на машине, а клиент у себя на машине))) я не понимаю как создать свой сервер и работать сним =( |
| Автор: Экскалупатор 27.10.2010, 07:37 |
что значит не "дали"? не разрешили использовать? тогда напиши что разрешили. или не знаешь как использовать? тогда надо найти толковую книжку. в принципе там нет ничего сложного(намного проще сокетов про которые ты тут упоминал) ну фактически у тебя должно получиться два приложения. у них должны быть общие интерфейсы для работы с друг другом. к примеру: серввер предоставляет интерфейс(определенный набор методов) для работы с собой. клиент знает о предоставленном интерфейсе и общается с сервером посредством методов описанных в интерфейсе. сервер с клиентом точно так же только в обратную сторону, сервер делает коннект к клиенту и заставляет того что то делать. |
| Автор: mrbrooks 27.10.2010, 08:02 | ||
все верно. только слово интерфейс надо заменить на контракт вообще если ориентация на .NET, то WCF - достаточно целомудренное решение. реализация чата - это скорее модель peer-to-peer, чем client-server |
| Автор: DenWPF 27.10.2010, 09:35 |
| честно сказать просто боюсь слова WCF - и нам на учебе его должны были дать, но дадут, только к зимой. на что нужно поставить wcf приложение(сервера) на фтп? или нужно спецальный хостинг? - я вот эту часть не понимаю. |
| Автор: Экскалупатор 27.10.2010, 09:46 |
при чем тут FTP? это протокол передачи файлов. |
| Автор: DenWPF 27.10.2010, 10:56 |
| где будет лежать сервер? мне не локально надо, а надо что бы люббой из нета зайти мог имея клиент |
| Автор: jonie 27.10.2010, 12:58 |
| имхо нафиг изобретать селосипед, когда уже есть готовые протоколы вроде XMPP (Jabber) и готовые сервера и библиотеки для них? |
| Автор: Экскалупатор 27.10.2010, 14:39 |
ну я так думаю что нужно написать какой то web-сервис. который будет предоставлять апи для работы клиентского софта. правда в таком случае сервер наверное не сможет обращаться к клиенту. т.е. клиент должен будет сам опрашивать сервер. |
| Автор: DenWPF 27.10.2010, 14:53 | ||
я не когда это не делал вот и спрашиваю. |