LifeOnNet Опубликовано 27 июля, 2006 Жалоба Поделиться Опубликовано 27 июля, 2006 Привет! Решил написать чат на основе php. Хотел бы услышать советы о том как лучше его реализовать а главное что лучше использовать для хранения сообщений. Для хранения есть 2 варианта: MySQL Shared Memory Первое перегружает сервер слишком сильно из-за большого количества запросов в бд, второе требует дополнительных знаний для реализации. Заранее благодарю желающих помочь! Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 28 июля, 2006 Жалоба Поделиться Опубликовано 28 июля, 2006 LifeOnNet: ты пишешь чат для себя или для продажи? Если для себя, то есть один быстрый и неочень сложный вариант, правда для него нужен хостинг с поддержкой сокетов. Есть один фаил php (если знаешь, то лучше написать на С++), который будет выполнять роль чат-сервера. Создай в нём сокет соединение (хост: IP сервера, порт:любой уникальный (напр:12780)) и просто прослушиваем порт. Последние сообщения здесь хранятся в оперативной памяти (в виде массива). Здесь же задай функцию, которая выполняется при каждом тике, она должна помещать старые сообщения в MySQL (если требуется вести лог чата) и удалять их элементы массива. Роль чат-клиента выполняет другой php фаил, который собственно будет взаимодействовать с браузером, он должен создать сокет соеденение с чат сервером, и выполнить определённые запросы для получения и добавления сообщений. Так же можно при желании сделать чат-сервер многопоточным (на С++ желательно). В завершение скажу, что я делал чат для большой локальной сети на данной основе + использовал AJAX технологию, чат работал давольно шустро. Ссылка на комментарий Поделиться на другие сайты Поделиться
LifeOnNet Опубликовано 28 июля, 2006 Автор Жалоба Поделиться Опубликовано 28 июля, 2006 ты пишешь чат для себя или для продажи? пишу для себя, точнее для своего сайта есть один быстрый и неочень сложный вариант, правда для него нужен хостинг с поддержкой сокетов. вполне устраивает, хостинг не нужен, есть свой сервер с поддержкой всего включая сокеты Создай в нём сокет соединение (хост: IP сервера, порт:любой уникальный (напр:12780)) и просто прослушиваем порт. Последние сообщения здесь хранятся в оперативной памяти (в виде массива). вот это меня и интересует. сервер подключенный к порту будет принимать столько запросов за раз сколько надо, или будет получать только один, а остальные в этот момент игнорировать? если бы мне это было известно, я бы написал код работы с сокетами даже на php. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 1 августа, 2006 Жалоба Поделиться Опубликовано 1 августа, 2006 LifeOnNet: если сможешь сделать многопоточность, то будут обрабатыватся все запросы к серверу при каждом новом запросе передаёшь управление соединением дочернему процессу. дочернему процесу нужно передать handle дочернего соединения (дочернее соединение открывается функцией socket_accept($sock), где $sock - handle родительского соединения) Ссылка на комментарий Поделиться на другие сайты Поделиться
LifeOnNet Опубликовано 21 августа, 2006 Автор Жалоба Поделиться Опубликовано 21 августа, 2006 Вопрос: а сколько сокетов могут подключаться к одному порту? Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 25 августа, 2006 Жалоба Поделиться Опубликовано 25 августа, 2006 LifeOnNet: слушать порт (сервер) может только один сокет. а подключаться к порту (клиент) по идее может быть неограниченно, но ограничевается возможностями сервера. ЗЫ: на Си многопоточный сервак написать проще ИМХО Ссылка на комментарий Поделиться на другие сайты Поделиться
LifeOnNet Опубликовано 27 августа, 2006 Автор Жалоба Поделиться Опубликовано 27 августа, 2006 LifeOnNet: слушать порт (сервер) может только один сокет. а подключаться к порту (клиент) по идее может быть неограниченно, но ограничевается возможностями сервера. ЗЫ: на Си многопоточный сервак написать проще ИМХО понятно, а где можно внимательнее ознакомится с принципом многопоточности, ну чтобы довольно таки аккуратно написать? И еще, хочу сервер чата вязать на 80 порт прямо вместо апача, как можно забирать заголовки целиком у запроса для обработки и чем их лучше разбирать? Да, и где про эти самые заголовки можно почитать побольше? Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 15 сентября, 2006 Жалоба Поделиться Опубликовано 15 сентября, 2006 (изменено) LifeOnNet: вот тут забрела в голову мысль как реализовать твою идею в жизнь. собственно тебе ничего не надо будет перехватывать, не надо будет задумыватся над многопоточностью, всё за нас сделает apache :) создай в корне сайта директорию ChatServer (регистр важен!) в ней размести фаил index.php с кодом сервера и фаил .htaccess следующего содержания: Order allow,denydeny from allallow from 127.0.0.1 собственно реализация простая ты должен будешь делать http-запросы к собственной папке /ChatServer запрос: GET /ChatServer/?parameters http/1.1HOST: your.chat.domain.comUser-agent: chat/client LifeOnNet/1.0 ну или что-то типа этого, советую изучить протокол http в данном случае мы перекладываем функцию многопоточности на веб-сервер и 100% тебя уверяю в том, что подобный метод будет работать быстрее, чем если писать чисто на php в скрипте сервера выводи любые header ну или, если привычнее echo или print а в скрипте клиента их обрабатывай если нужен будет доступ к папке ChatServer извне (что не рекомендую) то фаил .htaccess не создовай! Удачи! :) Изменено 15 сентября, 2006 пользователем Лорд Дмитрий Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти