Simple Chat 2

    
  

Разработка Simple Chat 2

http://simple.impomezia.com/Development - На этой странице представлены основные сведения, связанные с разработкой Simple Chat 2.
  
  

Поддержка SRV записей

В Simple Chat 0.x для определения адресов серверов в сети использовались специальные XML файлы сети, в которых были перечислены сервера, Новый Simple Chat 2 подобные файлы поддерживать не будет. Вместо этого будут использоваться стандартные возможности DNS, а именно SRV записи. Например, если мы хотим подключиться к серверу с адресом schat://schat.me клиент произведёт DNS запрос вида _schat._tcp.schat.me для получения SRV записей, в которых будет адреса и порты серверов обслуживающих этот домен. Явное указание порта или ip адреса позволяют отключить этот механизм.
  
  

Cookie авторизация

В Simple Chat 2 реализована Cookie авторизация, которая является дополнением для стандартной анонимной авторизации и используется для второго и последующих подключений к серверу. Основная задача этого типа авторизации сохранить идентификатор пользователя не именным при смене оборудования пользователя, при условии, что конфигурационный файл с параметрами подключения не будет изменён. В случае невозможности Cookie авторизации, будет произведена обычная анонимная авторизация. В любом случае всё происходит прозрачно для пользователя и не требует его участия.
  
  

Оффлайн-сообщения

Simple Chat 2 будет поддерживать оффлайн-сообщения. Поддержка этой функциональности обеспечивается серверным плагином Message Log, клиент поддерживает оффлайн-сообщения без всяких плагинов.
  
  

Объединение серверов

Сервера в Simple Chat 2 также можно будет объединять в одну сеть. Ограничения остались прежними один корневой сервер и до 255 вторичных серверов, которые могут быть к нему подключены. Последовательное соединение вторичных серверов и множественное подключение одного сервера к другим по-прежнему не поддерживается. Подобный механизм объединения, конечно, уступает IRC, но это лучше чем в других клиент-серверных чатах вообще не поддерживающих объединение.
  
  

Улучшения сервера

Сервер в Simple Chat 2 получит возможность принимать соединения одновременно на нескольких портах. Две конфигурационные опции ListenAddress и ListenPort заменены на одну Listen принимающую список разделённых запятыми пар адрес и порт, например 0.0.0.0:7667, 0.0.0.0:7669.
  
  

Контекстное меню пользователя

В ранних версиях Simple Chat контекстное меню пользователя вызывалось только в списке пользователей.

В Simple Chat 2 интеграция этого меню значительно переработана и теперь оно также отображается при клике правой кнопкой мыши в следующих случаях:
  • В заголовке вкладки приватного разговора
  • В любом месте в тексте приватного разговора, кроме клика по внешним ссылкам
  • По клику по нику в тексте чата.
  
  

Производительность SQLite для хранения сообщений

По умолчанию история сообщений в Simple Chat 2 будет храниться в SQLite базе данных. Начал реализовать запись истории и столкнулся с жуткими тормозами, простейшая вставка в пустую таблицу занимала 150 мс! Этого достаточно чтоб заметить задержку при добавлении сообщений.

Исправить оказалось довольно просто с помощью PRAGMA synchronous = OFF после чего время вставки составило 1-2 мс. Но эта опция может привести к повреждению базы при внезапном отключении питания и т.п.

Подобные результаты получились в Windows 7 64 бит, Qt 4.7.3 и встроенном в Qt SQLite 3.6.19.
  
  

Игнорирование сообщений

В Simple Chat 2 была добавлена поддержка игнорирования сообщений. Благодаря новой сетевой архитектуре это не потребовало изменения кода сервера. Используется уникальный идентификатор пользователя, поэтому смена ника или ip адреса не приведёт к обходу игнорирования.

Были добавлены две команды /ignore и /unignore, обе команды не принимают параметры в виде ника пользователя и т.д. и должны вводиться в открытой вкладке приватного разговора для автоматического получения идентификатора пользователя.
  
  

Разработка Simple Chat 2

Было решено создать полностью обновлённую версию Simple Chat с учётом всего накопленного ранее опыта, предложения по добавлению функционала приветствуются. Разработка не завершена, поэтому эта версия пока не доступна для скачивания в виде готового дистрибутива.
  
RSS-материал