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

в 14:35, , рубрики: erlang, javascript, php, web-разработка, Веб-разработка

Здравствуй, читатель!

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

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

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

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

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

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

<?php
require_once 'api/php/hawk_api.php';
use hawk_apihawk_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: статья по содержанию для «Я пиарюсь», но не хватает капельку кармы. Просьба модераторам перенести её туда.

Автор: Slavenin999

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js