la eterna aŭtuno interne

Утилиты для работы с вебсокетами

Понадобилась отладка клиент-сервера с вебсокетами на Go. Под вебсокеты в Go имеются две библиотеки:

Традиционных утилит под отладку HTTP здесь недостаточно, с вебсокетами по сути мы работаем с другим протоколом, HTTP используется только для инициализации соединения. Поюзав разные онлайновые сервисы, сделал для локальной отладки пару простых утилит — клиент и сервер. Клиент позволяет отправлять произвольные тексты на сервер (text messages в протоколе вебсокетов), сервер работает в режиме «эхо», отфутболивая запросы обратно клиенту. Плюс клиент и сервер обмениваются пингами, как того желают реализации вебсокетных приложений. Логи разной степени подробности валятся на экран, по идее этого достаточно. Глубокого анализа и вывода дампов утилиты принципиально не предполагают, т.к. для этого есть готовые средства — я использую для таких целей Wireshark. Код утилит небольшой, при необходимости, полагаю, несложно будет адаптировать их под другие задачи. Код на гитхабе под GPL.

Готовые бинарники можно скачать отсюда:

Для самостоятельной пересборки понадобится go-окружение и установка нескольких доп. пакетов:

 go get github.com/gorilla/websocket
 go get github.com/kdar/factorlog
 go get github.com/peterh/liner
  • websocket — библиотека из фреймворка Gorilla, я к ней как-то больше привык, ещё со времён черновых версий протокола, до принятия RFC4655.
  • factorlog — мой любимый логгер, с цветатым выводом
  • liner — удобная либа для реализации интерактивных CLI

Сам набор утилит можно забрать с гитхаба:

 git clone http://github.com/grafov/websocket-utils

Сервер по умолчанию слушает на порту 48084 локального интерфейса, с помощью параметра -listen это можно исправить. Клиенту указываем куда коннектиться с помощью -bind. Для более подробного вывода происходящих событий параметры -verb и -debug.

Клиент позволяет отправлять на сервер содержимое файлов:

  < sample-file.json

Или результат исполнения внешних команд:

  ! ls *.txt

Сервер и клиент поддерживают работу как друг с другом, так и с любыми валидными реализациями вебсокетов. Например:

 wsclient -bind=echo.websocket.org

Этот материал на google+.

Comments powered by Disqus
  • Shares:

Share