Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Веб чат на php


Рекомендуемые сообщения

Привет!

Решил написать чат на основе php.

Хотел бы услышать советы о том как лучше его реализовать а главное что лучше использовать для хранения сообщений.

Для хранения есть 2 варианта:

  1. MySQL
  2. Shared Memory

Первое перегружает сервер слишком сильно из-за большого количества запросов в бд, второе требует дополнительных знаний для реализации.

Заранее благодарю желающих помочь!

Ссылка на комментарий
Поделиться на другие сайты

LifeOnNet: ты пишешь чат для себя или для продажи?

Если для себя, то есть один быстрый и неочень сложный вариант, правда для него нужен хостинг с поддержкой сокетов.

Есть один фаил php (если знаешь, то лучше написать на С++), который будет выполнять роль чат-сервера. Создай в нём сокет соединение (хост: IP сервера, порт:любой уникальный (напр:12780)) и просто прослушиваем порт. Последние сообщения здесь хранятся в оперативной памяти (в виде массива). Здесь же задай функцию, которая выполняется при каждом тике, она должна помещать старые сообщения в MySQL (если требуется вести лог чата) и удалять их элементы массива.

Роль чат-клиента выполняет другой php фаил, который собственно будет взаимодействовать с браузером, он должен создать сокет соеденение с чат сервером, и выполнить определённые запросы для получения и добавления сообщений.

Так же можно при желании сделать чат-сервер многопоточным (на С++ желательно).

В завершение скажу, что я делал чат для большой локальной сети на данной основе + использовал AJAX технологию, чат работал давольно шустро.

Ссылка на комментарий
Поделиться на другие сайты

ты пишешь чат для себя или для продажи?

пишу для себя, точнее для своего сайта

есть один быстрый и неочень сложный вариант, правда для него нужен хостинг с поддержкой сокетов.

вполне устраивает, хостинг не нужен, есть свой сервер с поддержкой всего включая сокеты

Создай в нём сокет соединение (хост: IP сервера, порт:любой уникальный (напр:12780)) и просто прослушиваем порт. Последние сообщения здесь хранятся в оперативной памяти (в виде массива).

вот это меня и интересует. сервер подключенный к порту будет принимать столько запросов за раз сколько надо, или будет получать только один, а остальные в этот момент игнорировать?

если бы мне это было известно, я бы написал код работы с сокетами даже на php.

Ссылка на комментарий
Поделиться на другие сайты

LifeOnNet: если сможешь сделать многопоточность, то будут обрабатыватся все запросы к серверу

при каждом новом запросе передаёшь управление соединением дочернему процессу. дочернему процесу нужно передать handle дочернего соединения (дочернее соединение открывается функцией socket_accept($sock), где $sock - handle родительского соединения)

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

LifeOnNet: слушать порт (сервер) может только один сокет.

а подключаться к порту (клиент) по идее может быть неограниченно, но ограничевается возможностями сервера.

ЗЫ: на Си многопоточный сервак написать проще ИМХО

Ссылка на комментарий
Поделиться на другие сайты

LifeOnNet: слушать порт (сервер) может только один сокет.

а подключаться к порту (клиент) по идее может быть неограниченно, но ограничевается возможностями сервера.

ЗЫ: на Си многопоточный сервак написать проще ИМХО

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

И еще, хочу сервер чата вязать на 80 порт прямо вместо апача, как можно забирать заголовки целиком у запроса для обработки и чем их лучше разбирать? Да, и где про эти самые заголовки можно почитать побольше?

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

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 не создовай!

Удачи! :)

Изменено пользователем Лорд Дмитрий
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...