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 заявки сразу после её создания и нажав самую левую кнопку на дополнительной панели навигации.
КАТЕГОРИЯ
Инструменты программирования