gwsocket是一个简单、独立、与语言无关、符合 RFC6455 的 WebSocket 服务器,用 C 语言编写。它位于您的应用程序和客户端浏览器之间,可以轻松灵活地在两者之间提供快速的双向通信。更多信息请访问:https://gwsocket.io。
非常简单,只需将应用程序(stdout)的输出重定向到stdin
或文件(命名管道),然后让gwsocket将数据传输到浏览器 - 就是这样。
例如,将服务器日志跟踪到浏览器中再简单不过了
# tail -f /var/log/nginx/access.log > /tmp/wspipein.fifo
或者
# tail -f /var/log/nginx/access.log | gwsocket
您还可以将客户端的数据输入(标准输入)您的应用程序。事实上,您甚至可以将您最喜欢的 ncurses 程序的输出发送到浏览器。请参阅上面的截屏视频。
我需要一个用 C 编写的快速、简单、无依赖性、无库、符合 RFC6455 的WebSocket 服务器,我可以通过简单地管道输入和输出数据来将其用于GoAccess 1.0 版本 — 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> | Websocket 框架的最大大小。 |
--origin=<origin> | 确保客户端在握手时发送指定的原始标头。 |
--pipein=<path/file> | 创建一个从给定路径/文件读取的命名管道 (FIFO)。 |
--pipeout=<path/file> | 创建写入给定路径/文件的命名管道 (FIFO)。 |
--std | 启用--stdin 和--stdout 。 |
--stdin | 将 stdin 发送到 websocket。 |
--stdout | 将接收到的 websocket 数据发送到 stdout。 |
--strict | 使用严格模式解析消息。有关更多详细信息,请参阅手册页。 |
--ssl-cert=<cert.crt> | SSL 证书的路径。 |
--ssl-key=<priv.key> | SSL 私钥的路径。 |
--unix-socket=<addr> | 指定将服务器绑定到的 UNIX 域套接字地址。 |
epoll
和kqueue
麻省理工学院许可
欢迎任何有关 gwsocket 的帮助。最有帮助的方法是尝试并提供反馈。请随意使用 Github 问题跟踪器和拉取请求来讨论和提交代码更改。
享受!