Здравствуй, читатель!
Практический каждый 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