Spec-Zone.ru › Tcllib

multiplexer

НАЗВАНИЕ

multiplexer — связь «один ко многим» с использованием сокетов.

Содержание

  • Содержание

  • Краткое описание

  • Описание

  • Ошибки, идеи, отзывы

  • Категория

КРАТКОЕ ОПИСАНИЕ

package require Tcl 8.5 9
package require logger
package require multiplexer ?0.3?

::multiplexer::create
${multiplexer_instance}::Init port
${multiplexer_instance}::Config key value
${multiplexer_instance}::AddFilter cmdprefix
cmdprefix data chan clientaddress clientport
${multiplexer_instance}::AddAccessFilter cmdprefix
cmdprefix chan clientaddress clientport
${multiplexer_instance}::AddExitFilter cmdprefix
cmdprefix chan clientaddress clientport

ОПИСАНИЕ

Пакет multiplexer предоставляет универсальную систему связи «один ко многим» с использованием сокетов. Например, представьте чат, в котором один пользователь отправляет сообщение, а оно рассылается всем остальным подключённым пользователям.

Одновременно могут работать несколько мультиплексоров.

  • ::multiplexer::create

    Команда create создаёт новый «экземпляр» мультиплексора. Например:

    set mp [::multiplexer::create]
    

    Затем этим экземпляром можно управлять следующим образом:

    ${mp}::Init 35100
    
  • ${multiplexer_instance}::Init port

    Запускает мультиплексор, который начинает прослушивать указанный порт.

  • ${multiplexer_instance}::Config key value

    Используйте Config для настройки экземпляра мультиплексора. В настоящее время доступны следующие параметры:

    • sendtoorigin

      Логический флаг. Если его значение — true, отправитель получит копию отправленного сообщения. По умолчанию — false.

    • debuglevel

      Задаёт уровень отладки для экземпляра мультиплексора согласно уровням, определённым в пакете logger (debug, info, notice, warn, error, critical).

  • ${multiplexer_instance}::AddFilter cmdprefix

    Команда для добавления фильтра данных, проходящих через экземпляр мультиплексора. Зарегистрированный cmdprefix вызывается при поступлении данных в экземпляр мультиплексора. Если в экземпляре зарегистрировано несколько команд фильтрации, они вызываются в порядке регистрации, и каждая фильтрующая команда получает в качестве аргумента результат предыдущей. Первый фильтр получает в качестве аргумента входящие данные. Результат, возвращённый последним фильтром, становится данными, которые будут переданы всем клиентам экземпляра мультиплексора. Префикс команды вызывается следующим образом:

    • cmdprefix data chan clientaddress clientport

      Принимает входящие data, изменяет их и возвращает результат. Последние три аргумента содержат сведения о клиенте, отправившем данные для фильтрации: канал, соединяющий нас с клиентом, его IP-адрес и IP-порт.

  • ${multiplexer_instance}::AddAccessFilter cmdprefix

    Команда для добавления фильтра доступа. Зарегистрированный cmdprefix вызывается, когда сокет нового клиента пытается подключиться к экземпляру мультиплексора. Если в экземпляре зарегистрировано несколько команд фильтрации доступа, они вызываются в порядке регистрации. Если любая из вызванных команд возвращает -1, доступ к экземпляру мультиплексора запрещается, а канал клиента немедленно закрывается. Любой другой результат предоставляет клиенту доступ к экземпляру мультиплексора. Префикс команды вызывается следующим образом:

    • cmdprefix chan clientaddress clientport

      Аргументы содержат сведения о клиенте, пытающемся подключиться к экземпляру: канал, соединяющий нас с клиентом, его IP-адрес и IP-порт.

  • ${multiplexer_instance}::AddExitFilter cmdprefix

    Добавляет фильтр, запускаемый при возникновении условия EOF на сокете клиента. Зарегистрированный cmdprefix вызывается, когда сокет клиента мультиплексора сообщает об EOF. Если в экземпляре зарегистрировано несколько команд фильтрации при завершении, они вызываются в порядке регистрации. Ошибки, возникающие в фильтре завершения, игнорируются, но записываются в журнал. Результат, возвращённый фильтром завершения, игнорируется. Префикс команды вызывается следующим образом:

    • cmdprefix chan clientaddress clientport

      Аргументы содержат сведения о клиенте, сообщившем об EOF: канал, соединяющий нас с клиентом, его IP-адрес и IP-порт.

Ошибки, идеи, отзывы

В этом документе и описываемом в нём пакете, несомненно, могут содержаться ошибки и другие проблемы. Просим сообщать о них в категории multiplexer в системе отслеживания ошибок Tcllib. Также сообщайте о любых идеях по улучшению пакета и/или документации.

Предлагая изменения кода, пожалуйста, предоставляйте унифицированные различия, то есть результат выполнения diff -u.

Обратите внимание, что вложения предпочтительнее встроенных патчей. Вложения можно добавить, открыв форму Edit заявки сразу после её создания и нажав самую левую кнопку на дополнительной панели навигации.

КАТЕГОРИЯ

Инструменты программирования

Licensed under the BSD license
https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/multiplexer/multiplexer.md

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API