Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Сделаем сервис лучше » Разработка чата для форумов


Разработка чата для форумов

Сообщений 41 страница 60 из 80

1

Вначале тема называлась: phpFreeChat (на подумать Админу Майбб), но после начавшегося обсуждения, я думаю, правильнее тему назвать: Разработка чата для форумов

phpFreeChat

Есть такой движок чата на php без базы: phpFreeChat v1 http://www.phpfreechat.net/src/1.0/
http://sa.uploads.ru/t/3Kbfy.gif
Его не сложно интегрировать в punBB:

Интегрирование в PunBB

How to connect PunBB nicknames to phpfreechat ?
You have to put this piece of code at beginning of your chat script:

  session_start();
  if (!isset($_SESSION['punbb_to_pfc_nickname']))
  {
    define('PUN_ROOT', dirname(__FILE__).'/forum/'); // adjust this path to your forum installation root
    require PUN_ROOT.'include/common.php';
    $userdata = array();
    check_cookie($userdata);
    if ($userdata['username'] == 'Guest')
      $userdata['username'] .= rand(1,1000); // generate a random guest username
    $_SESSION['punbb_to_pfc_nickname'] = $userdata['username'];
  }
Then you can write the classic phpfreechat parameter list using “$_SESSION['punbb_to_pfc_nickname']” as the phpfreechat nickname. For example:

  require_once "src/phpfreechat.class.php";
  $params["serverid"]          = md5(__FILE__);
  $params["title"]             = "phpFreeChat connected to the PunBB forum";
  $params["channels"]          = array("General","PunBB support");
  $params["language"]          = "en_US";
  $params["nick"]              = $_SESSION['punbb_to_pfc_nickname'];
  $chat = new phpFreeChat($params);

http://www.phpfreechat.net/faq

Есть один недостаток, так как он без базы, то запись идет в папку на сервер.

Это я к чему? К тому, что пользователи Майбб достаточно часто обращаются с просьбой сделать чат на форуме, чтобы регистрация на форумах Майбб действовала и в чате, так может Админ Майбб заинтересуется такой возможностью, может и на платной основе (все таки нагрузка на сервера) - думаю окупится..Может кто из умельцов подумает..Чат неплох - давно его знаю, есть поддержка..Есть еще вторая версия, но я им не пользовался, да и с интеграцией там непонятно.

Отредактировано kolobdur74 (Пн, 17 Ноя 2014 18:29:56)

0

41

Fover
Тут палка в возможностях: если Админ ставит чат на майбовский движок - вопросов нет, если ставишь ты или John Warner без привязки к БД майб - тут фишка прокатит и востребована, пока решений от Админа нет, а к Новому году сбацать чат было бы неплохо, независимо от решений администрации майб.

Отредактировано Deff (Сб, 15 Ноя 2014 16:28:52)

0

42

Deff написал(а):

Я могу, если надо передать во фрейм чата ник и id  форума и текущего юзера,
к примеру как

Да там всё проще, в случае с phpBB3 и phpBB вообще: достаточно указать, что данный php-код находится "in phpbb" - две строчки, с указанием принятия кодом сессии и что код находится в системе.
Не знаю, честно, как оно устроено в punBB, но в phpBB такие вещи делаются легко и просто.
Ща дам код, я с бани пришёл только что.

Fover написал(а):

Что вы несете? У вас открытый доступ ко всем возможностям, а вы собираетесь передавать чату параметры так:

Интересно, вот бы у нас в БД завести табличко для чата...
Ну ничего больше не надо - тем более, она особенно-то и не засирает БД, ибо кратковременно хранит.

0

43

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

0

44

Вот.
Указание, что чат "в законе":

Код:
define('IN_PHPBB', true);

Указание, что чат юзает сессии, что важно:

Код:
define('CHAT_TABLE', $table_prefix . 'chat');
define('CHAT_SESSIONS_TABLE', $table_prefix . 'chat_sessions');

Чат настраивается с помощью пары строк во встроенном конфиге - но организовать энто дело через БД - пара пустяков, я так делал:

Код:
$session_time = 300;
$default_delay = 15;
//set status
$times = array(
	'online'	=> 0,
	'idle'=> 300,
	'offline'	=> 1800,
);
//set delay for each status
$delay = array(
	'online'	=> 5,
	'idle'=> 60,
	'offline'	=> 300,
);

Выборка юзернейма производится из таблицы в БД phpbb_users, тут, я думаю, придётся попотеть.
Весь код приводить не буду.
А куда залить  архивчег, а?
Залил на яндех дриве.

Fover написал(а):

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

ИМХО, удобнее переработать уже готовое, ящитаю...
Вот я подкинул реально удобный чат - это уже проверено...

Добавлено спустя 4 минуты 37 секунд: Долбаный сокращатель похерил ссылку. Пришлось подправить, сейчас уже доступна.

Отредактировано John Warner (Сб, 15 Ноя 2014 16:59:33)

0

45

Вот вам чат, пользуйтесь:  :D

Код:
<textarea name="chat"> </textarea>
<input type="submit" value="Отправить">
Код:
$('input[value="Отправить"]').click(function(){
  var msg = $('textarea[name="chat"]').val();
  $.ajax({
    url: 'ссылка',
    type: 'POST',
    data: 'user='+UserLogin+'&message='+msg,
    success: function(data) {
      // бла бла бла
    }
});
Код:
<?
$msg = $_POST['chat'];
mysql_query('INSERT INTO chat (user, message) VALUES ("'.$_POST['user'].'", "'.$_POST['message'].'")');
?>

Отредактировано Fover (Сб, 15 Ноя 2014 17:10:07)

0

46

А вы знаете, я чота тут посидел и подумал, и надумал вот что: надо бы мне его слеганца перезапилить и вкукожить себе в собираемый мною движок на основе phpBB2, а то у мну творческий кризис, и я не могу себя заставить делать что-либо.
А тут повод)))
И правда, так и сделаю)))

Сорри за оффтоп.

+1

47

Fover
В чате на форум для юзабельности важно две весчи(они и самые трудные):
1. Организация уплывания постов вверх от текущего, т.е планка скроллбара всегда внизу(см. сbox)
2. Не делать перезапросов со всех вкладок с чатом, т.е общий архив постов на локаль Cторадж, слушать событие добавки в локаль Cторадж, и определение текущей открытой вкладки или последней существующей открытой.
Оттель(из этой вкладки) и делаем запросы, в принципе, при всех неактивных вкладок мон запросы и похерить, возобновляя их по активности.

Отредактировано Deff (Сб, 15 Ноя 2014 18:03:49)

0

48

Deff
Собсно я могу написать чат, но сам понимаешь: только в лабе на платной основе и вряд ли скоро.

0

49

Fover написал(а):

но сам понимаешь: только в лабе на платной основе

Собственно я потому и грю, проще чат писать на PHP отдельно от лаб и вставлять для интереса к разработке-поддержке чата баннеры от партнёрок. Тады задача первичной монетизации - решена с ходу, без лаб. РНР чаты хорошо отработаны, останется лишь вкрячить авторизацию по хешу ссылки запроса на страницу чата. хеш можно слегка кодирнуть от злоумышленников, например в code64

Отредактировано Deff (Сб, 15 Ноя 2014 18:37:40)

0

50

Чаты на php и mysql - гамно.

0

51

Deff написал(а):

хеш можно слегка кодирнуть от злоумышленников, например в code64

Это не спасет от злоумышленников.

0

52

Duka
Но но, еще и аякс.

0

53

Fover
технологии начала двухтысячных )

0

54

Duka написал(а):

Чаты на php и mysql - гамно.

Чаты на флэш - гамно и отстой.

+1

55

Duka
Зато проверенно, надежно и просто. Да и вообще собсно не я же его писать буду - так-то пофигу на чем он будет.

0

56

John Warner
Такое впечатление, что чаты только на php+mysql и флеше делать можно.
Мы писали на C++ + long-polling, очень быстрый. NodeJS + Websocket — еще быстрее. Но Mysql, на мой взгляд, в чатах масштаба нашего сервиса — вообще смерть.

0

57

Duka написал(а):

Такое впечатление, что чаты только на php+mysql и флеше делать можно.
Мы писали на C++ + long-polling, очень быстрый. NodeJS + Websocket — еще быстрее. Но Mysql, на мой взгляд, в чатах масштаба нашего сервиса — вообще смерть.

Я и не сомневался, что ты крут..Но ты не заметил, что ты превратился в человека, который периодически сюда заглядывает, и рассказывает всем, что они неумехи, а ты крут? Тебе осталось добавить, чтобы забили на идею чата и не занимались фигней...Собсно все, кто пытается растормошить Майбб занимаются фигней, правда когда то и ты этим занимался, но ты это перерос - ты стал крутым, с чем и поздравляю..

+3

58

Duka написал(а):

John Warner
Такое впечатление, что чаты только на php+mysql и флеше делать можно.
Мы писали на C++ + long-polling, очень быстрый. NodeJS + Websocket — еще быстрее. Но Mysql, на мой взгляд, в чатах масштаба нашего сервиса — вообще смерть.

Если так подумать, то MySQL вообще плох в масштабах крупных сервисов из-за необходимости большого количества вещей в прослойке (я клоню к отсутствию SQL-функций и процедур). Но переводиться с MySQL - гемморой запредельный. Проще сделать MyBB 2.0 для такой вещи, но, судя по скорости введения новинок, это случится, в лучшем случае, лет эдак через 10 :D

Вообще говоря, опубликовал бы Макс исходный код движка хотя бы для ограниченного круга лиц-активистов форума (тому же kolobdur74 или Deff'у) и сразу бы много полезных вещей появилось бы.
Но это мечты...


По теме: можно попытаться сделать ajax-подгрузку сообщений и прочие красоты, симулирующие чат на основе RSS (благо туда включается сообщение целиком, имя автора (без uid, увы) и время сообщения), однако мы сразу же упрёмся в проблему ограничения количества сообщений в теме, существование которого меня до сих пор вводит в глубокий ступор (серьёзно, почему 1000, а не, скажем, 5 или 10к? Профита же никакого, единицы тем достигают это отметки)...

Теоретически, можно запаститьсь этими темами впрок, а форум, где они хранится прятать... Но это откровенный костыль.

0

59

kozhilya написал(а):

Если так подумать, то MySQL вообще плох в масштабах крупных сервисов из-за необходимости большого количества вещей в прослойке (я клоню к отсутствию SQL-функций и процедур). Но переводиться с MySQL - гемморой запредельный. Проще сделать MyBB 2.0 для такой вещи, но, судя по скорости введения новинок, это случится, в лучшем случае, лет эдак через 10

Вообще говоря, опубликовал бы Макс исходный код движка хотя бы для ограниченного круга лиц-активистов форума (тому же kolobdur74 или Deff'у) и сразу бы много полезных вещей появилось бы.
Но это мечты...

По теме: можно попытаться сделать ajax-подгрузку сообщений и прочие красоты, симулирующие чат на основе RSS (благо туда включается сообщение целиком, имя автора (без uid, увы) и время сообщения), однако мы сразу же упрёмся в проблему ограничения количества сообщений в теме, существование которого меня до сих пор вводит в глубокий ступор

Проблемы решаемы, просто две темы - одна административная (Модераторы чата, Забаненные и текущая ссылка на тему с чат сообщениями) Есть скрипт автопродления тем, при его сработке кидаем в админ-тему новую ссылку на текущую тему сообщений

0

60

Deff написал(а):

Проблемы решаемы, просто две темы - одна административная (Модераторы чата, Забаненные и текущая ссылка на тему с чат сообщениями) Есть скрипт автопродления тем, при его сработке кидаем в админ-тему новую ссылку на текущую тему сообщений

Права доступа, как по мне, лучше проверять на основе GroupID: зачем изобретать велосипед? Если человек не имеет право писать в раздел - он туда не напишет даже если очень сильно захочет.
По мере написание сообщения понял, что идея довольно скверная из-за того, что юзеру не будут видны модераторы.

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

План по завоеванию мира

0) Нам нужен подфорум с темами чата, открытый для гостей (иначе RSS выдаст "No data"). В нём должны всегда быть 2 темы: одна пустая и одна текущая. Пустая будет для предотвращения создания нескольких тем из-за потенциальных возможностей создания нескольких тем. Превентативность, в данном случае, нам поможет.

1) На отдельной странице (/pages/smth?) размечаем чат:
- Служебный iframe
- Поле сообщений
- Форма ввода

2) Грузим в iframe подфорум, узнаём id актуальной темы чата.
2.1) Если у нас не доступа - выводим "Access denied"

3) Грузим тему (достаточно 1-ю страницу), проверяем права
3.1) Нет формы ответа - Читатель
3.1) Есть форма ответа - Пользователь
3.2) Есть кнопка "Редактировать" - Модератор

4) В setInterval(function, int) начинаем грузить последние сообщения.
4.1) (Для предотварщения "слипаний" сообщений и вообще спама) Если в новых сообщений есть собщение самого пользователя, замораживаем на 10 секунд форму отправки сообщений

5) Поле ввода сообщения делаем простейшим: в нём работают все bb-коды, но простой доступ мы дадим только к базовым (b, i, u, s, url, img) и смайлам.
5.1) За счёт того, что RSS-ответ даётся в виде HTML, парсить текст не придётся. Но упростить отображение [ quote ] стоит.

6) При отправке сообщения (стоит добавить поддержку Ctrl + Enter), генерируем POST-запрос к серверу (надо будет с iframe тянуть process_form дабы получить formkey.
6.0) Как вариант, постить можно через тот же iframe. Возможно, это проще, но задержку никто не отменял.
6.1) Если мы получили в ответ ошибку (этот момент надо протестировать), переотправляем сообщение в следующую тему.
6.2) Если в новой теме (проверяем по iframe) сообщение #2 принадлежит пользователю, то создаём следующую тему.
6.3) В любом случае, блокируем отправку сообщения (разблокировка произойдёт по пункту 4.1).

Очевидные проблемы данного плана:
1) Ни в RSS, ни в Atom нет uid отправителя. Как пройти кому-то в профиль из чата - вопрос открытый.
1.1) Блокировка будет довольно заторможеной.
2) Список людей, смотрящих чат - информация недостижимая либо получаемая слишком сложным образом.
3) Если по какой-то причине не сработает 6.2 - чат сломается.
4) Редактирование сообщений не работает для нас: в RSS не фиксируется, что какие-то сообщения было изменены.
5) Сообщения могут пропадать, если каким-то образом за паузу между RSS-запросами будет получено слишком много сообщений (хотя получить 30 сообщений за 10 секунд при реализации пунктов 6.3 и 4.1 плана будет возмножно только на сверх-загруженных чатах).
5) Нам может потребоваться 1 или даже 2 iframe. Благо, их обработку можно сделать асинхронной.

В принципе, можно сделать дополнительные слэш-команды. Например /me <Сообщение> для описания соотояния (стандарт в чатах)
Имхо, надо сделать /delete <pid> и /deleteall <username> модераторам для контроля за содержимым чата.


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

+1


Вы здесь » Единый форум поддержки » Сделаем сервис лучше » Разработка чата для форумов