Практический каждый 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/
Добавить комментарий