Создание системы обмена мгновенными сообщениями

Автор: Пользователь скрыл имя, 17 Декабря 2012 в 23:56, диссертация

Описание работы

Постановка задачи: Создать клиент-серверное приложение для обмена сообщениями в реальном времени.
Детальное описание: Клиентская часть должна быть реализована в графическом варианте. После запуска клиент пытается установить соединение с сервером, получает список всех доступных для общения пользователей, которым может отправлять/получать сообщения. Необходимо оповещать клиента об изменение в доступном списке контактов.

Работа содержит 1 файл

report.doc

— 1.36 Мб (Скачать)

Проект Jabber был основан Джереми Миллером в начале 1998 года с разработки сервера jabberd[5]. Первое сообщение о проекте появилось 4 января 1999 года на сайте Slashdot[6]. Эту дату принято считать днем рождения технологии[5]. Вскоре после этого к проекту присоединилось несколько основных разработчиков, которые стали работать над сервером jabberd, клиентами для Windows и GNU/Linux, а также шлюзами в основные системы IM (AIM, ICQ, MSN, и Yahoo). Позже, в 1999 году, Webb Interactive Services начало спонсировать основных разработчиков, что ускорило процесс создания проекта. В то время появилась основа протокола Jabber, а также сервер jabberd и ранние клиенты, такие, как WinJab (устарел и получил своё развитие в Exodus) и Gabber. Этот ранний период постоянных изменений закончился в мае 2000 года с выпуском jabberd 1.0.

 

Рис. 1.9. Главное окно комнаты в клиенте Pidgin.

Ранний протокол Jabber сформировал  основы для стандарта XMPP, опубликованного  как RFC 3920. Часто этот момент рассматривается как начало соперничества с SIMPLE, основанным на протоколе SIP, как стандартного протокола для мгновенного обмена сообщениями и информацией о присутствии.

С августа  2001 года протокол Jabber переходит под контроль Jabber Software Foundation (16 января 2007 года Jabber Software Foundation была переименована в XMPP Standards Foundation[8]), для более точного описания своей работы развития расширений собственно протокола, в отличие от линии развития программы с одноименным названием.

Jabber, Inc. занимается развитием двух проектов — Jabber Extensible Communications Platform (Jabber XCP) и JabberNow. Первый является фреймворком, а второй — программно-аппаратное решение (специально собранный и настроенный компьютер). Сайт jabber.org все ещё функционирует. Инвесторами проекта Jabber являются Jona, Inc., France Telecom, Intel Capital, и Webb Interactive Services, Inc.[1]

В августе 2005 года Google представил сервис Google Talk — комбинацию VoIP и клиента для обмена сообщениями, использующий XMPP для функций переписки, а также как основу для передачи голоса и файлов. Первоначальный запуск сервиса от Google не включал межсерверного общения, но к 17 января 2006 года такая возможность была добавлена.

 

 

Рис. 1.10. Схема устройства работы XMPP.

Семейство протоколов XMPP принято как  стандарт RFC. Стандартный порт для XMPP — 5222. Также возможно использовать порт 80 и/или 443, если возникают проблемы с файрволом.

Каждый пользователь в сети Jabber имеет уникальный идентификатор — Jabber ID (сокращенно JID). Адрес JID, подобно адресу электронной почты, содержит имя пользователя и доменное имя сервера, на котором зарегистрирован пользователь, разделённые знаком “@”. Например, пользователь user, зарегистрированный на сервере example.com, будет иметь адрес: user@example.com.

Пользователь  может иметь одновременно несколько подключений, для различения которых используется дополнительное значение JID, называемое ресурсом и добавляемое через слэш в конец адреса. К примеру, пусть полный адрес пользователя будет user@example.com/work, тогда сообщения, посланные на адрес user@example.com, дойдут на указанный адрес вне зависимости от имени ресурса, но сообщения для user@example.com/work дойдут на указанный адрес только при соответствующем подключенном ресурсе.

Адреса JID могут  также использоваться без явного указания имени пользователя (с указанием имени ресурса или без такового) для системных сообщений и для контроля специальных возможностей на сервере.

AOL Instant Messenger

AOL Instant Messenger (AIM) — программа мгновенного обмена сообщениями, предлагаемая фирмой AOL (America OnLine). Она появилась в мае 1997 года. Последняя версия AIM Triton обладает возможностями IP-телефонии, поддержки универсальной адресной книжки Plaxo, отправкой SMS через компьютер (при условии установки соответствующих плагинов) и многими другими улучшениями.

Рис. 1.11. Логотип AIM клиента.

Skype

Skype[9] — бесплатное проприетарное программное обеспечение с закрытым кодом, обеспечивающее шифрованную голосовую связь и видеосвязь через Интернет между компьютерами (VoIP), а также платные услуги для звонков на мобильные и стационарные телефоны.

 

Рис. 1.12. Логотип продукта Skype.

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

В отличие от многих других программ IP-телефонии, для передачи данных Skype использует P2P-архитектуру. Каталог пользователей Skype распределён по компьютерам пользователей сети Skype, что позволяет сети легко масштабироваться до очень больших размеров (в данный момент более 100 миллионов пользователей, 15—25 миллионов онлайн) без дорогой инфраструктуры централизованных серверов.

Кроме того, Skype может маршрутизировать звонки через компьютеры других пользователей. Это позволяет соединяться друг с другом пользователям, находящимся за NAT или брандмауэром, однако создаёт дополнительную нагрузку на компьютеры и каналы пользователей, подключённых к Интернету напрямую.

Единственным центральным элементом  для Skype является сервер идентификации, на котором хранятся учётные записи пользователей и резервные копии их списков контактов. Центральный сервер нужен только для установки связи. После того как связь установлена, компьютеры пересылают голосовые данные напрямую друг другу (если между ними есть прямая связь) или через Skype-посредник (суперузел — компьютер, у которого есть внешний IP-адрес и открыт TCP-порт для Skype). В частности, если два компьютера, находящиеся внутри одной локальной сети, установили между собой Skype-соединение, то связь с Интернетом можно прервать и разговор будет продолжаться вплоть до его завершения пользователями или какого-либо сбоя связи внутри локальной сети.

Skype позволяет пользователям общаться  не только с помощью голоса, но и более традиционным способом — с помощью текстовых сообщений (IM-чата). Голосовой чат позволяет разговаривать как с одним пользователем, так и устраивать конференц-связь. Он использует собственные кодеки.

Skype-чат позволяет устраивать  групповые чаты, посылать смайлики, хранить историю. Также предоставляются обычные для IM-чатов возможности — профили пользователя, индикаторы состояния (статус) и так далее. Кроме того, Skype предоставляет возможность обмена файлами без ограничения размера и со стандартными опциями временной остановки пересылки и автоматического возобновления при подключении после потери связи или выключения программы Skype до конца передачи файла.

 

Рис. 1.13. Главное меню программы Skype.

Mail.ru Agent

Мail.Ru Агент — бесплатная программа для быстрого обмена сообщениями через Интернет, разработанная компанией Mail.ru в 2003 году.

 

Рис. 1.14. Логоти программы Mail.ru Агент.

Помимо быстрого обмена сообщениями, программа поддерживает также возможности IP-телефонии, видеозвонки и бесплатную отправку SMS, а также уведомляет о новой почте, пришедшей по email. Внутренний протокол обмена данными Mail.Ru Агента является частично открытым. В частности, в документации протокола нет описания VoIP-звонков и игр. К тому же, описание протокола не обновляется в соответствии с действующей версией протокола между официальным серверным и клиентским ПО.

В настоящее время уже разработаны  версии мессенджера для почти  всех популярных платформ — Windows, Mac OS, Java, Windows Mobile, Symbian, iPhone и Android. Кроме того, существует специальная версия Mail.Ru Агента, не требующая установки и работающая прямо в браузере в почтовом сервисе или социальной сети портала — Веб-Агент.

 

2. Выбор метода решения

Для создания системы обмена мгновенными  сообщениями было принято использовать язык программирования Java, для написания клиент-серверного приложения. Хранение истории переписки, информация о пользователях будет хранится в таблицах реляционной модели базы данных SQL сервера Oracle. Отправляемые сообщения будут формироваться в виде XML – пакетов, а подключение двух и более клиентов реализовано с помощью многопоточности, средствами языка Java.

Особенности языка программирования Java

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры.

Программы на Java транслируются в  байт-код, выполняемый виртуальной  машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

Достоинство подобного способа выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.

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

1.  применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,

2.  широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,

3.  аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.

Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft

Программное обеспечение было реализовано  в версии Java 7.

Релиз версии состоялся 28 июля 2011 года. В финальную  версию Java SE 7 не были включены все ранее  запланированные изменения. Согласно плану развития (план «Б»), включение  нововведений будет разбито на две части: Java SE 7 (без лямбд, проекта Jigsaw, и части улучшений Coin) и Java SE 8 (все остальное), намеченный на конец 2012 года.

В новой версии, получившей название Java SE 7 (Java Platform, Standard Edition 7), помимо исправления  большого количества ошибок были представлено несколько новшеств. Так, например, в качестве эталонной реализации Java SE 7 использован не проприетарный пакет JDK, а его открытая реализация OpenJDK, а сам релиз новой версии платформы готовился при тесном сотрудничестве инженеров Oracle с участниками мировой экосистемы Java, комитетом JCP (Java Community Process) и сообществом OpenJDK. Все поставляемые Oracle бинарные файлы эталонной реализации Java SE 7 собраны на основе кодовой базы OpenJDK, сама эталонная реализация полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с проприетарными продуктами. К другим нововведениям относится интеграция набора небольших языковых улучшений Java, развиваемых в рамках проекта Coin, добавлена поддержка языков программирования с динамической типизацией, таких как Ruby, Python и JavaScript, поддержка загрузки классов по URL, обновленный XML-стек, включающий JAXP 1.4, JAXB 2.2a и JAX-WS 2.2 и другие.

За 5 дней до выхода релиза Java SE 7 было обнаружено несколько серьёзных  ошибок в горячей оптимизации  циклов, которая включена по умолчанию  и приводит виртуальную машину Java к краху. Специалисты Oracle найденные ошибки за столь короткий срок исправить не могли, но пообещали, что они будут исправлены во втором обновлении (Java 7 Update 2) и частично в первом.

Список нововведений:

      • Поддержка динамически-типизированных языков (InvokeDynamic) — расширение JVM (семантики байт-кода), языка Java для поддержки динамически-типизированных языков.
      • Строгая проверка class-файлов — class-файлы версии 51 (SE 7) или более поздней версии должны быть проверены typechecking верификатором; JVM не должна переключаться на старый верификатор.
      • Изменение синтаксиса языка Java (Project Coin) — частичные изменения в языке Java, предназначенные для упрощения общих задач программирования:
      • Использование класса String в блоке switch.
      • Закрытие используемых ресурсов в блоке try (try-with-resources) — работает при использовании интерфейса AutoCloseable.
      • Объединённая обработка исключений в блоке catch (multi-catch exceptions) — перечисление обрабатываемых исключений в catch (… | … | …).
      • Повторное выбрасывание исключений (rethrowing exceptions) — передача возникшего исключения «вверх» по стеку вызовов.
      • Подчёркивания в числовых литералах для лучшего восприятия больших чисел.
      • Изменение вывода типа в Java generic при создании объекта.
      • Использование двоичных чисел (binary literals) — префикс «0b» укажет, что используется двоичное число.
      • Упрощение вызова методов varargs — уменьшение предупреждений при вызове метода с переменным числом входящих переменных.
      • Модификация загрузчика классов (class-loader) — избежание тупиковых ситуаций в неиерархической топологии загрузки классов.
      • Закрытие ресурсов, открытых URLClassLoader.
      • Обновление коллекций (JSR 166y).
      • Поддержка Unicode 6.0.
      • Отделение языка пользователя и языка пользовательского интерфейса — обновление обработки языков для отделения локали от языка пользовательского интерфейса.
      • Новые интерфейсы I/O для платформы Java (nio.2).
      • Использование JDBC 4.1 и Rowset 1.1.

Информация о работе Создание системы обмена мгновенными сообщениями