Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


courses:high_performance_computing:chat

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
courses:high_performance_computing:chat [2016/11/11 07:17] kelcourses:high_performance_computing:chat [2017/01/02 18:41] kel
Line 1: Line 1:
-====== Чат [черновик] ======+====== Чат ======
 Реализовать: Реализовать:
-  - **асинхронный**: не должно быть ни одной синхронной операции ввода/вывода, предполагается использование набора технологий типа //boost::asio//, //java::nio2//...+  - **асинхронный**: не должно быть ни одной синхронной операции ввода/вывода, предполагается использование набора технологий типа //boost::asio//, //java::nio2//, //Qt//...
   - **неблокирующий**   - **неблокирующий**
   - **многопоточный**: сервер должен принимать как параметр командной строки число потоков в пуле, который будет разгребать сетевые события   - **многопоточный**: сервер должен принимать как параметр командной строки число потоков в пуле, который будет разгребать сетевые события
  
-чат, работающий по единому протоколу, определённому в нотации //protobuf// и учитывающему как минимум имя пользователя+чат, работающий по единому протоколу, определённому в нотации //protobuf// и учитывающему как минимум имя пользователя:
  
-//Оганичения на язык//: нет+<code php> 
 +// ------------------------------------------------------------------- 
 +/// \brief ChatMessage - сообщение, передаваемое между сервером и клиентами 
 +// ------------------------------------------------------------------- 
 +message ChatMessage { 
 +    required string Sender = 1; ///< Идентификатор отправителя 
 +    required string Text = 2;   ///< Содержание сообщения 
 +    optional string Data = 3;   ///< Internal field. Можно использовать для реализации каких-либо 
 +}                               ///< собственных фич у своего сервера/клиента. Однако, стоит помнить, 
 +                                ///< что все сервера-клиенты должны быть совместимы друг с другом 
 +</code> 
 + 
 +В качестве механизма доставки сообщений между сторонами предлагается использовать протокол TCP. Этот протокол не допускает дублирование переданных пакетов и гарантирует доставку отправленных сообщений в рамках установленного соединения. Так как протокол TCP гарантирует доставку и правильную очередность данных, то для выделения отдельных сообщений из потока байт мы можем использовать самый простой из существующих способов - перед отправкой сообщения в канал сначала передавать его размер. Отметим, что большая часть сообщений, передаваемых в рамках сеанса управления, имеет небольшой размер. Поэтому использовать для представления размера сообщения фиксированное количество байт, позволяющее передать размер максимально возможного сообщения (например - 4 байта), черезчур избыточно. Поэтому, для представления размера сообщения мы будем использовать целое число в т.н. кодировке переменной длины (variable-length encoding), которая кодирует числа минимально возможным количеством байт и рекомендована Google. Функции для работы с этой кодировкой присутствуют в библиотеке Google Protocol Buffers. 
 + 
 +//Оганичения на язык//: нет\\ 
 +//Интерфейс пользователя//: опционален
courses/high_performance_computing/chat.txt · Last modified: 2018/04/01 20:27 by kel