[an error occurred while processing this directive] IT • archiv :: Print

IT • archiv


[an error occurred while processing this directive]

[an error occurred while processing this directive]

Доставка сотовых сообщений с помощью SMS

[an error occurred while processing this directive](none) [an error occurred while processing this directive](none)[an error occurred while processing this directive] ::
[an error occurred while processing this directive](none)
[an error occurred while processing this directive]([an error occurred while processing this directive] Сонал Банзал, Гурав Пал [an error occurred while processing this directive])

[an error occurred while processing this directive](none)

SMS: Быстрый путь обеспечения сотовых телефонов информационными услугами.

Mobile Computing
PDF versionPDF версия
Обзор
Рост количества устройств мобильной связи увеличил потребность в Internet сервисах, с которыми эти устройства могут быстро связываться. Эта статья кратко исследует некоторые из имеющихся беспроводных Internet сервисов и подробно описывает практическое серверное Java решение, которое может обеспечить информационными услугами сотовые телефоны с помощью SMS (Short Message Service) и Web форм. (2100 слов)

Величина рынка мобильных устройств растет по экспоненте. В своем обзоре Gartner Dataquest прогнозировал, что в 2000 году продажи мобильных телефонов во всем мире достигнут 412.7 миллионов единиц, что на 45.5 процентов больше, чем в 1999 году. (Ссылка на этот обзор есть в Ресурсах) Этот рост, наряду с развитием Internet в направлении Web услуг, увеличил спрос на Internet услуги для мобильных устройств, особенно сотовых телефонов. Многие технологии могут быть использованы для предоставления ценных услуг пользователям сотовых телефонов, например, Wireless Application Protocol (WAP) и Short Message Service (SMS).

WAP, разработанный WAP Forum-ом, является стандартом для обеспечения связи беспроводных устройств, каковыми являются сотовый телефон, PDA или пейджер, с Internet. Ожидалось, что WAP станет преобладающим стандартом для обеспечения мобильного доступа в Internet, однако несколько отчетов показали, что WAP вряд ли справится с этой задачей в ближайшем будущем. Из-за недостаточных инфраструктурных вложений в шлюзы (gateways) устройства, поддерживающие WAP, не эволюционировали в достаточной мере для поддержки этих услуг. Остались не решенными так же вопросы быстродействия. В обзоре, проведенном департаментом средств массовой информации в университете Tamkang (Тайвань), говорится, что 80 процентов пользователей сотовых телефонов со средствами WAP, высказали свою неудовлетворенность по отношению к WAP. (См. Ресурсы.) Среди причин были указаны скорость, точнее ее нехватка, цена и недостаток наполнения. Эти факторы могут привести к смерти WAP, что напрямую скажется на разработчиках приложений. Бессмысленно инвестировать технологию, которая может не выжить.

SMS это жизнеспособный стандарт, являющийся платформой для предоставления информационных услуг. SMS не может предоставить те же возможности для просмотра (browsing) что и WAP, однако он вполне удовлетворяет потребность в сообщениях типа point-to-point. Информационные услуги SMS становятся даже более привлекательными когда вы сравните огромную массу телефонов поддерживающих SMS с ничтожным количеством телефонов поддерживающих WAP. В соответствии с отчетом от 21 марта 2000 года, приведенном на internet.com, "Companies Seek to Bridge 'WAP Gap,'" (Ссылка есть в Ресурсах), на сегодняшний день используется более 400 миллионов традиционных (не поддерживающих WAP) цифровых беспроводных телефонов.

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

Замечание
На этой неделе доктор Bertrand Meyer будет беседовать с членами JavaWorld forum в форуме Interviews. Meyer написал Object-Oriented Software Construction, часто упоминаемую как лучшую книгу об объектно-ориентированном анализе и дизайне; однако, более всего он известен благодаря своему языку программирования Eiffel и связанной с ним концепции "дизайн по контракту", которую он весьма эффективно распространил. Ему можно будет задавать вопросы с 3 по 5 апреля.

Что такое SMS?

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

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

Сначала SMS предполагалось использовать на буквенно-цифровых пейджерах с применением двухстороннего общецелевого обмена сообщениями и услуг оповещения, главным образом для голосовой почты. С ростом технологий и сетей было предложено множество услуг, таких как интерактивный банк, финансовые и биржевые сводки, интеграция с Internet приложениями, электронной почтой, факсом и пейджером. В дополнение к этому, интеграция с Internet ускорила развитие сервиса Web сообщений и других интерактивных приложений, таких как обмен сообщениями в реальном времени, игр, чатов.

Ниже приведены несколько причин, почему именно SMS, а не WAP, следует использовать для предоставления ценных услуг пользователям мобильных устройств:

Базируясь на предполагаемой величине спроса на беспроводные услуги, беспроводные сообщения и доступ к финансовым сервисам оказались преобладающими, уменьшая потребность в просмотре (основном достоинстве WAP).

Чтобы использовать SMS для доставки информации на сотовый телефон мы предлагаем использование HTML форм, доступных у большинства операторов сотовой связи для посылки сообщений их подписчикам. Это поможет нам сделать наше решение простым и практичным.

Обработка Web форм

Web форма — это Web страница, которая посылает информацию (такую как имя пользователя, пароль, и т.д.) на сервер. Обработка Web форм — это взаимодействие с HTML Web формой с помощью компьютерной программы. Большинство операторов сотовой связи имеют Web сайты, с которых можно отправлять сообщения подписчикам. Наше решение использует эту возможность для доставки финансовой информации беспроводным способом, не имея фактического соединения с беспроводной сетью.

Практическое Java решение

Мы продемонстрируем приложение, которое вы можете использовать чтобы доставить Web информацию на сотовый телефон пользователя посредством SMS. Вот некоторые общие "сценарии" приложения:

Наше решение, состоящее из двух частей, состоит из Java сервлета и приложения, которое доставляет котировки акций на сотовый телефон пользователя используя SMS. Вы можете с легкостью использовать это также для предоставления других услуг. Приложение получает информацию с хорошо известных Web сайтов и отправляет ее на сотовый телефон пользователя. Сначала пользователь должен создать профиль (profile), который детально описывает акции, периодичность обновлений, и другую информацию.

Приложение работает следующим образом:

  1. Используя HTML форму Java сервлет извлекает и сохраняет информацию о профиле пользователя. Эта информация включает следующее:
    • Уникальный идентификатор, в нашем случае — email адрес
    • Оператор сотовой связи
    • Номер сотового телефона
    • Периодичность обновления
    • Акции
  2. Профиль пользователя сохраняется в локальном текстовом файле.
  3. Консольное приложение, которое может быть запущено в отдельной JVM (виртуальной машине Java), занимается распределением временных интервалов и посылкой. Оно извлекает котировки с Yahoo Quotes и определяет, каким пользователям следует отправить сообщения, основываясь на периодичности, указанной в профилях пользователей.
  4. Для каждого пользователя, удовлетворяющего этому критерию, приложение передает котировки акций обработчику, выбор которого производится на основании оператора сотовой связи пользователя.
  5. Обработчик посылает данные в HTML форму на Web сайте оператора, который предлагает интерфейс Web-SMS.
  6. Приложение ожидает 1 час и затем возвращается к шагу 3.

Картинка ниже иллюстрирует этот процесс на высоком уровне. Сначала пользователь вводит профиль посредством браузера, который соединяется с сервлетом CellQuotes. Этот сервлет сохраняет профиль в простом "плоском" файле, который считывает приложение TimeWorker. Основываясь на настройках профиля, приложение TimeWorker извлекает котировки акций из потока данных поставщика, например http://quote.yahoo.com, и посылает их в HTML форму соответствующего оператора сотовой связи. Затем данные перенаправляются на соответствующий сотовый телефон посредством SMS.

Упрощенная диаграмма сценария.
Рисунок 1. Упрощенная диаграмма сценария.

Архитектура решения

Наше решение использует следующие классы:

Замечание
Вы можете загрузить исходный код полностью. Ссылка в Ресурсах.
  1. Profile.java инкапсулирует информацию специфичную для пользователя
  2. ProfileReader.java считывает профили из "плоского" файла как объекты класса Profile
  3. ProfileWriter.java записывает объекты класса Profile в "плоский" файл
  4. Constants.java содержит константы, такие как имя файла профиля
  5. CellQuotes.java сервлет, реализующий Web интерфейс для нашего решения
  6. TimeWorker.java приложение, работающее на сервере (невидимое для пользователей), реализующее отсылку
  7. CellProvider.java интерфейс для добавления операторов сотовой связи
  8. CellProviderSelector.java "фабрика", которая возвращает соответствующую реализацию CellProvider

Остальные классы просто вспомогательные, так что мы сконцентрируемся на сервлете CellQuotes и приложении TimeWorker, которые используют общий ресурс: файл транзакций. Сервлет сохраняет профили в файле транзакций, приложение считывает новые профили из файла и добавляет из к основному хранилищу. Следовательно, доступ к файлу транзакций должен быть синхронизирован (synchronized). Для упрощения мы придумали лексему lockFile. Если сервлет видит, что lockFile существует, он предполагает, что приложение читает файл транзакций и ждет своей очереди. Если приложение обнаруживает, что лексема lockFile существует, оно предполагает, что сервлет записывает информацию в файл транзакций и ожидает своей очереди. Мы также предусмотрели функциональность для проверки тайм-аута, чтобы избежать истощения системных ресурсов и тупиковых ситуаций (deadlock).

Ниже представлен код сервлета CellQuotes:

public class CellQuotes extends HttpServlet
{
   public void doGet(...) throws ServletException
   {
      // return HTML Form to user
      // We do this by simply reading a local
      // file and dumping it to the response stream
   }

   public void doPost(...) throws ServletException
   {
      // extract profile information from POST
      // assume its already been validated
      // by JavaScript on client
      // save parameters as new Profile object
      ...
      // Write the profile to disk
      writeProfile(profile);
      ...

      // clean up
      ...
   }

   private void writeProfile(Profile p)
   {
      // synchronize on some static object, 
      // so that multiple servlet instances
      // don't corrupt profiles file

      synchronized(obj)
      {
         // check for existence of LockFile
         if(Constants.lockFile.exists())
         {
            // waiting and timeout code goes here
         }

         // Since access is available, 
         // create lockfile and write to transaction file
         ProfileWriter pw = 
	   new ProfileWriter(Constants.transactionFile);
         prw.writeProfile(p);
         ...
      }
   }
}

Вам, должно быть, интересно почему мы реализовали синхронизацию таким "окольным путем" используя lockFile, тайм-ауты, и т.д. Почему бы не сделать это, используя синхронизацию и общий статический объект? К несчастью, это не так просто. Наш подход предполагает, что сервлет и приложение могут исполняться в разных JVM (что скорее всего и произойдет); что означает, что общий статический объект невозможно будет создать. (Если вы знаете лучший способ синхронизации, пожалуйста, дайте нам знать.)

Сервлет CellQuotes сохраняет профиль пользователя в плоском файле. Приложение TimeWorker добавляет этот профиль к своему главному хранилищу и производит операции на сохраненных профилях. Приложение TimeWorker должно просыпаться каждый час, чтобы определить какие пользователи должны получить котировки акций, и обновить свое главное хранилище профилей. Может понадобиться послать котировки акций не только пользователям с периодичностью обновления в 1 час, но и тем, у которых периодичность составляет 3 часа, 6 часов и т.д. Как TimeWorker определяет каким пользователям отсылать?

У нас есть счетчик представляющий часы в дне (24). Если текущий час делится без остатка на периодичность обновления установленную пользователем, значит пользователь должен получить котировки. Вот пример.

Предположим, мы запустили приложение в 00:00 и у нас есть три пользователя:

  • A: с периодичностью обновления 1 час
  • B: с периодичностью обновления 3 часа
  • C: с периодичностью обновления 6 часов

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

  • В 00:00 значение счетчика равно 0. Ноль можно разделить на все три периодичности, так что TimeWorker отсылает всем пользователям их котировки.
  • В 01:00 час значение счетчика равно 1. Только пользователь А получает котировки.
  • В 02:00 часа значение счетчика равно 2. Опять только пользователь А получает котировки.
  • В 03:00 часа значение счетчика равно 3. Пользователи A и B получают котировки.
  • В 06:00 часов значение счетчика равно 3. Все пользователи получают котировки.

Так как у каждого оператора есть свой Web интерфейс для отправки SMS сообщений, TimeWorker после этого должно отправить котировки оператору сотовой связи каждого пользователя. Для этого мы используем шаблон проектирования (Design pattern) типа Фабрика (Factory). Для каждого оператора сотовой связи есть реализация интерфейса CellProvider. Список таких классов (реализующих этот интерфейс) хранится в текстовом файле. Класс CellProviderSelector содержит метод getProvider(String ID), который определяет соответствующий обработчик, основываясь на ID. Этот метод использует Reflection API. Таким образом, добавление оператора сотовой связи в нашем решении сводится к:

  1. Написанию реализации интерфейса CellProvider и внесению ее в classpath
  2. Добавлению Classname к текстовому файлу CellProviderRegistry
  3. И надежде, что вся эта хитрость действительно работает

Последний пункт неважен, т.к. это действительно работает!

Приведенный ниже код показывает "внутренности" приложения TimeWorker

public class TimeWorker
{
   private static int counter = 0;

   public static void main(String argv[])
   {
      // we want the application to run 
      // continuously, so enter an infinite loop

      while(true)
      {
         // check if Transaction file exists
         // if yes, then new profiles must be 
         // merged with main store
         if(Constants.transactionFile.exists())
         {
            // check if lockfile exists
            if(Constants.lockFile.exists())
            {
               // waiting and timeout code goes here
               ...
            }

            // We have access to transaction file, 
            // so create lockfile and merge profiles
            ...
         }

         // Main store is up-to-date

         while(...) // loop to read all user profiles
         {
            // read next profile
            // check if user is "eligible" to be sent quotes
            if(...)
            {
               // get quotes for user's stock 
               // symbols from quote.yahoo.com
               // get CellProvider implementation 
               // from CellProviderSelector factory
               CellProvider prov = 
    		CellProviderSelector.getCellProvider(
    			profile.getProviderID());

               // send quotes to this handler, 
               // which then sends SMS message
            }
         }

         // All user-profiles have been dealt with, sleep now

         counter++;
         try
         {
            // sleep for an hour
            Thread.sleep(1000*60*60);
         }
         catch(InterruptedException ie)
         {
            ...
         }
      }
   }
}

Ограничения

Наша технология весьма упрощена и не ориентирована на производительность, и нам бы очень хотелось узнать о любых альтернативных подходах, найденных вами. Наш подход имеет некоторые ограничения. Например, наше решение очень тесно связано с Web формами. Так как обработка Web форм используется как средство отправки SMS сообщений, реализация CellProvider легко может устареть.

Мы также предлагаем несколько вариантов улучшений:

  1. Вы можете сделать заготовки для редактирования пользовательских профилей
  2. Чтобы придать приложению более законченный вид, вы можете добавить компонент для набора номера используя Java Telephony API. Это позволит пользователям просто сделать звонок, чтобы включить/выключить услугу.
  3. Профили пользователей и информацию об операторах сотовой связи можно хранить в XML файлах.

Заключение

Наше решение использует комбинацию Java сервлета и приложения, чтобы проиллюстрировать простой путь предоставления ценных услуг людям, у которых есть возможность получать текстовые сообщения (посредством SMS) на их сотовые телефоны. Пока еще не ясно будущее WAP и нет другого лучшего протокола для улучшения мобильных услуг, SMS может быть вполне жизнеспособной альтернативой. Возможности применения SMS в приложениях ограничены только вашим воображением и изобретательностью.

Об авторе

Sonal Bansal в данный момент является участником научной компьютерной программы в Loyola College в Индии. Он имеет около 5 лет опыта программирования, и среди его законченных работ есть программы для таких известных организаций как Indian Railways Institute of Electrical Engineering (IRIEEN) and Electrical Department, южная железная дорога. Он стал приверженцем Java после того как ислледовал С и другие языки.

Gaurav Pal является консультантом RDA. У него диплом бакалавра компьютерных наук и более шести лет опыта разработки программного обеспечения, включаяя более 3 лет программирования на Java. Он сертифицирован Sun-ом как разработчик Java 2 и программист Java 1.1. В данный момент получает степень магистра в университете штата Maryland. Gaurav много писал для таких изданий как IEEE Potentials и Computer Communications UK и поддерживает собственный Web сайт JavaPal.com.

Ресурсы

Reprinted with permission from the March 2001 edition of JavaWorld magazine. Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/javaworld/ jw-03-2001/jw-0330-sms.html

[an error occurred while processing this directive]
[an error occurred while processing this directive] Перевод на русский © Максим Рева, 2001
< Вернуться на caйт :: Copyright © 1999 — 2010, IT • archiv.