Ускорь свои сообщения с post-hawk

от автора

Здравствуй, %habrauser%!

Практический каждый web-разработчик, рано или поздно сталкивается с пожеланием типа: «Хочу сообщения, как в контакте». В каждом проекте, это означает что-то своё, но как правило, везде присутствует обмен сообщениями между пользователями в реальном времени. И тут начинается веселье…

Появляются на свет разного рода велосипеды и дорабатываются уже существующие, так как вероятность «взять и использовать» готовое решение в неизменном виде стремится к 0. Каждый использует разные подходы для решения этой задачи, кто-то commet-server, кто-то просто polling, ну а кто-то заморочится и напишет socket-сервер с подключением через WebSocket. Все эти варианты имеют право на существование, но на их реализацию тратится солидное время, так как ни один из них нельзя назвать простым.

Все это я проходил. В какой-то момент пришла мысль: «Сколько можно!?» — и я стал думать и подбирать инструменты. Проанализировав, то что удалось найти, для реализации серверной части остановился на Erlang/OTP, который идеально подходил для поставленной задачи. И работа закипела…

В итоге на свет появился сервис Post Hawk. Одной из самых сложных задач было сделать простое и понятное апи, не требующее полдня на вникание и еще неделю на прикручивание. Пока доступно только для php, впрочем, его реализация для других языков не потребует много времени. Код открыт и находится здесь.

Как происходит процесс? Всё просто. Вы регистрируетесь в сервисе, добавляете домен(ы) с которого (ых) будут пересылаться сообщения, подключаете один класс на серверной стороне, одну крошечную библиотеку на клиентской и подписываетесь на события. Библиотеки здесь. Ну а дальше делаете с пришедшими сообщениями всё, что хотите.

Простой пример использования

<?php require_once 'api/php/hawk_api.php'; use \hawk_api\hawk_api;  //создаём объект апи $api_key = 'ключ, полученный после регистрации'; $api = new hawk_api($api_key); //регистрируем пользователя в системе //рекомендуется делать при авторизации пользователя $api->register_user('24c9e15e52afc47c225b757e7bee1f9d'); ?> 
<html>     <head>         <title>Демо</title>         <script type="text/javascript" src="api/js/jquery.js"></script>         <script type="text/javascript" src="api/js/hawk_api.js"></script>         <script type="text/javascript"> 

            $(document).ready(function(){                 HAWK_API.init({                         user_id: '24c9e15e52afc47c225b757e7bee1f9d' //идентификатор пользователя, который зарегистрирован в системе                 });                 $('#send').click(function(){                     var text = $('#to_m').val();                     if(text.trim() != '')                     {                         //эти данные будут переданы в неизменном виде через систему, пользователю, указанному в "to"                         //из-за ограничений erlang менять порядок свойств или добавлять новые, запрещается                         //можно изменять только их содержимое                                                 var m = JSON.stringify({                             from: HAWK_API.get_user_id(),//от кого сообщение                             to: $('#to_u').val(), //кому сообщение                             time: Math.floor(new Date / 1000), //дата сообщения                             text: text //текст сообщения                         });                                                 //отправка сообщения                                     HAWK_API.send_message(m);                         $('#messages').append(' ' + HAWK_API.get_user_id() + ': ' + text + ' ');                     }                 });                                 //подписываемся на новые сообщения                 HAWK_API.bind_handler('hawk.message', function(e, msg) {                     $('#messages').append(' ' + msg.from + ': ' + msg.text + '   ');                 });             }); 

        </script>     </head>     <body>         <div id="messages" style="width: 500px; height: 250px; border: 2px solid green;"></div>         Кому: <input id="to_u" type="text"><br>         Текст: <textarea id="to_m"></textarea><br>         <input type="button" id="send" value="Отправить">     </body> </html> 

Теперь немного о конфиденциальности.

Сервис не сохраняет ваши сообщения. Если вы боитесь за сохранность данных пользователей можете воспользоваться любой библиотекой шифрования, как на клиенте (несколько библиотек), так и на сервере (например, mcrypt) в любом случае сервису ваши сообщения не нужны. Фиксируется только сам факт передачи для сбора статистики. Планируется доработать клиентскую библиотеку для поддержки шифрования «из коробки».

Сколько стоит?
Пока — бесплатно. Сервис находится в стадии бэты и каких-то ограничений не планируется.

Монетизация сервиса будет. Но, тут есть большое НО. Сервис не ставит задачу обогатить своих создателей. В какой-то момент я понял, зачем я это делаю и появилась еще одна цель — помочь, детям, которые в этом нуждаются. Откуда это пришло, сложно сказать, но с того момента, как я её перед собой поставил, процесс пошёл гораздо легче. Пока нет юр. лица, да и не известно нужно ли оно, на сайте есть скрипт для доната через Яндекс.Деньги и номера кошельков web money. Чуть позже сделаю страницу с отчётами о переведённых средствах (если будет о чём отчитываться).

Благодарю за внимание!
Надеюсь, получилось что-то полезное. Буду рад любой конструктивной критике и предложениям.

PS: статья по содержанию для «Я пиарюсь», но не хватает капельку кармы. Просьба модераторам перенести её туда.

ссылка на оригинал статьи http://habrahabr.ru/post/231105/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *