Chatter основан на python 2.7, использует tornado.
Имеется готовое API для python (бэкэнд) и для js (фронтэнд)
Примеры и исходный код на github.
Для чего же собственно он был создан?
Для быстрой и удобной разработки. Имеется собственный «протокол» — обёртка над json.
Структура «app» файла:
from chatter import BaseSocketHandler, run_application, Clients class Example1SocketHandler(BaseSocketHandler): #так называемый namespace проекта - один сервер может поддерживать несколько неймспейсов одновременно group = 'example1' def main(): #Tornado-handler'ы run_application([ (r'/example1', Example1SocketHandler), ]) if __name__ == '__main__': main()
Команды хранятся рядом с app файлов в папке api. Структура папки:
- api/
- example1/ наш проект-неймспейс
- group/ группа методов
- method1.py метод 1
- method2.py метод 2
- group/ группа методов
- example2/ наш проект #2
- group/ группа методов
- method1.py метод 1
- method2.py метод 2
- group/ группа методов
- example1/ наш проект-неймспейс
Больше ничего не нужно — при запуске сервиса папка api будет автоматически проанализирована на «методы», будет построена древовидная структура методов.
Поддерживается динамическое обновление методов (пример в гите — chat).
Файл метода (/api/example1/hello/world.py):
class __api_result__(APIMethod): #параметры анализируются автоматически, порядок не имеет значение - главное "имя" параметра def run(self, text1, text2, text3): #возвращаем результат - tuple #нулевой элемент - dict-параметров #первый - success (результат выполнения - True / False) return ({'text': [text1, text2, text3]}, True)
А теперь html-js-часть:
<!DOCTYPE html> <html> <head> <title>Chatter test</title> <meta charset="UTF-8"> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <!-- подключаем chatter.js --> <script src="js/vmchatter.js"></script> <script src="http://code.jquery.com/jquery.js"></script> <script> //Описываем наш класс для работы с сервером. все конструкторы - типовые function Example1Chatter(host, port, params) { //создаем экземпляр chatter'а, на нужный хост, порт, указывая нужный "неймспейс" this.chatter = new VMChatter(host, port, 'example1', params, this); } //Добавляем метод, называя его hello Example1Chatter.prototype.hello = function(text2, text1, text3, callback) { //Сам проанализирует параметры, порядок также не имеет значение, главное, чтобы имена совпадали с серверной частью this.chatter.applyMethod('hello', 'world', arguments); }; </script> <script type="text/javascript"> var sx; $(document).ready(function() { //Создаем, подключаемся sx = new Example1Chatter('localhost', 8888, { 'onOpen': function(){ console.log('Connected'); }, 'onClose': function(){ console.log('Disconnected'); } }); }); function sendHello() { sx.hello('text2', 'text1', 'text3', function(data, success) { $('#results').append('<p>' + data.text + '</p>'); }); } </script> </head> <body> <button class="btn" onclick="sendHello();">Send hello</button> <div id="results"></div </body>
Также поддерживается подписка на события (массовая рассылка подписавшимся, отправка определенному клиенту).
На данный момент, к сожалению, документация отсутствует, но я в процессе её написания. Данный фреймворк используется в компании, где я работаю. Так что он «проверен» на нагрузки, часть багов выловлена и исправлена.
Есть очень много возможностей, не представленных здесь и в примерах, готовятся еще несколько «плюшек».
Остальные примеры и исходный код на github.
ссылка на оригинал статьи http://habrahabr.ru/post/184090/
Добавить комментарий