Chatter — основанный на python 2.7 websocket-framework с использованием tornado

от автора

Хочу представить сообществу своё небольшое творение — Chatter.

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

    • example2/ наш проект #2
      • group/ группа методов
        • method1.py метод 1
        • method2.py метод 2

Больше ничего не нужно — при запуске сервиса папка 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/


Комментарии

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

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