gwsocket — это простой, автономный, независимый от языка, совместимый с RFC6455 сервер WebSocket, написанный на C. Он находится между вашим приложением и браузером клиента, обеспечивая быструю двустороннюю связь между ними, простоту и гибкость. Дополнительная информация: https://gwsocket.io.
Очень просто: просто перенаправьте вывод вашего приложения (стандартный вывод) на stdin
или в файл (именованный канал) и позвольте gwsocket передать данные в браузер — вот и все.
Например, фиксация журналов вашего сервера в браузере не может быть проще.
# tail -f /var/log/nginx/access.log > /tmp/wspipein.fifo
ИЛИ
# tail -f /var/log/nginx/access.log | gwsocket
Вы также можете передать данные клиента в (stdin) вашего приложения. Фактически, вы даже можете отправить вывод вашей любимой программы ncurses в браузер. Смотрите скриншот выше.
Мне нужен был быстрый , простой , без зависимостей и библиотек , совместимый с RFC6455 сервер WebSocket, написанный на C, который я мог бы использовать для версии 1.0 GoAccess , просто передавая данные по конвейеру — с WebSockets стало проще!
gwsocket не зависит от языка. Более подробную информацию и примеры о том, как получать данные из браузера и отправлять их в браузер, можно найти на странице руководства.
Установить gwsocket довольно просто. Просто скачайте, распакуйте и скомпилируйте его с помощью:
$ wget https://tar.gwsocket.io/gwsocket-0.4.tar.gz
$ tar -xzvf gwsocket-0.4.tar.gz
$ cd gwsocket-0.4/
$ ./configure
$ make
# make install
Никакие зависимости не нужны. Как здорово, не правда ли :), ну почти, вам нужны gcc
, make
и т.д.
$ git clone s://github.com/allinurl/gwsocket.git
$ cd gwsocket
$ autoreconf -fiv
$ ./configure
$ make
# make install
Чтобы установить канал между вашим приложением и браузером клиента, gwsocket предоставляет два метода, которые позволяют пользователю отправлять и отправлять данные. Первый — через использование стандартного ввода (stdin) и стандартного вывода (stdout). Второй метод заключается в использовании заголовка фиксированного размера, за которым следует полезная нагрузка. Подробнее см. варианты ниже.
Стандартный ввод/вывод — это самый простой способ отправки/получения данных клиенту/от него. Однако он ограничен широковещательной рассылкой сообщений всем клиентам. Чтобы отправлять сообщения определенному клиенту или получать от него, используйте строгий режим, описанный в следующем разделе. См. примеры для конкретных языков здесь.
gwsocket реализует собственный крошечный протокол для отправки/получения данных. В отличие от режима stdin/stdout , строгий режим позволяет отправлять и получать данные конкретным подключенным клиентам и от них, а также отслеживать, кто открыл/закрыл соединение WebSocket. Это также дает вам возможность упаковывать и отправлять столько данных, сколько вы хотите, в одном сообщении. См. примеры для конкретных языков здесь.
В командную строку можно указать следующие параметры.
Параметр командной строки | Описание |
---|---|
-p --port | Указывает порт для привязки. |
-h --help | Помощь по командной строке. |
-V --version | Отобразить информацию о версии и выйти. |
--access-log=<path/file> | Указывает путь/файл для журнала доступа. |
--addr=<addr> | Указывает адрес для привязки. |
--echo-mode | Настройте сервер на эхо всех полученных сообщений. |
--max-frame-size=<bytes> | Максимальный размер фрейма веб-сокета. |
--origin=<origin> | Убедитесь, что клиенты отправляют указанный заголовок источника при рукопожатии. |
--pipein=<path/file> | Создает именованный канал (FIFO), который читает данные по заданному пути/файлу. |
--pipeout=<path/file> | Создает именованный канал (FIFO), который записывает в заданный путь/файл. |
--std | Включите --stdin и --stdout . |
--stdin | Отправьте стандартный ввод в веб-сокет. |
--stdout | Отправьте полученные данные веб-сокета на стандартный вывод. |
--strict | Анализируйте сообщения в строгом режиме. См. справочную страницу для более подробной информации. |
--ssl-cert=<cert.crt> | Путь к сертификату SSL. |
--ssl-key=<priv.key> | Путь к закрытому ключу SSL. |
--unix-socket=<addr> | Укажите адрес сокета UNIX-домена, к которому будет привязан сервер. |
epoll
и kqueue
Лицензия MIT
Любая помощь по gwsocket приветствуется. Самый полезный способ — попробовать и оставить отзыв. Не стесняйтесь использовать систему отслеживания ошибок Github и запросы на включение, чтобы обсуждать и отправлять изменения кода.
Наслаждаться!