gwsocket

fast, standalone, language-agnostic WebSocket server RFC6455 compliant

Github星跟蹤圖

gwsocket Build Status gwsocket

What is it?

gwsocket is a simple, standalone, language-agnostic, RFC6455 compliant
WebSocket Server, written in C. It sits between your application and the
client's browser, giving fast bidirectional communication between these two
with ease and flexibility. More info at:
http://gwsocket.io.

gwsocket terminal

How it Works?

Very simple, just redirect the output from your application (stdout) to a
file (named pipe) and let gwsocket transfer the data to the browser —
That's it.

For example, tailing your server's logs into the browser couldn't be easier

tail -f /var/log/nginx/access.log > /tmp/wspipein.fifo

You can also get the client's data into (stdin) your application. In fact,
you can even send your favorite ncurses program's output to the browser. See
screencast above.

Features

  • Message Fragmentation per section 5.4
  • UTF-8 Handling
  • Framing (Text & Binary messages)
  • Multiplexed non-blocking network I/O
  • Ability to pipe data in/out in two different modes (stdin/stdout & strict mode)
  • Origin-based restriction
  • It passes the Autobahn Testsuite :)
  • and of course, Valgrind tested
  • missing something?, please feel free to post it on Github.

Why gwsocket?

I needed a fast, simple, no-dependencies, no libraries,
RFC6455 compliant WebSocket Server written in C that I could use for
version 1.0 of GoAccess by simply piping data in
and out — WebSockets made easy!

More Examples?

gwsocket is language agnostic, look at the Man Page
for more details and examples on how to receive data from the browser and how
to send it to the browser.

Installation

Installing gwsocket is pretty easy. Just download, extract and compile it with:

$ wget http://tar.gwsocket.io/gwsocket-0.3.tar.gz
$ tar -xzvf gwsocket-0.3.tar.gz
$ cd gwsocket-0.3/
$ ./configure
$ make
# make install

No dependencies needed. How nice isn't it :), well almost, you need gcc, make, etc.

Build from GitHub

$ git clone https://github.com/allinurl/gwsocket.git
$ cd gwsocket
$ autoreconf -fiv
$ ./configure
$ make
# make install

Data Modes

In order to establish a channel between your application and the client's
browser, gwsocket provides two methods that allow the user to send data in and
out. The first one is through the use of the standard input (stdin), and the
standard output (stdout). The second method is through a fixed-size header
followed by the payload. See options below for more details.

STDIN/STDOUT

The standard input/output is the simplest way of sending/receiving data to/from
a client. However, it's limited to broadcasting messages to all clients. To
send messages to or receive from a specific client, use the strict mode in the
next section. See language specific examples here.

Strict Mode

gwsocket implements its own tiny protocol for sending/receiving data. In
contrast to the stdin/stdout mode, the strict mode allows you to
send/receive data to/from specific connected clients as well as to keep track
of who opened/closed a WebSocket connection. It also gives you the ability to
pack and send as much data as you would like on a single message. See language
specific examples here.

Command Line / Config Options

The following options can be supplied to the command line., Command Line Option, Description, ----------------------------, --------------------------------------------------------------------, -p --port, Specifies the port to bind., -h --help, Command line help., -V --version, Display version information and exit., --access-log=<path/file>, Specifies the path/file for the access log., --addr=<addr>, Specifies the address to bind., --echo-mode, Set the server to echo all received messages., --max-frame-size=<bytes>, Maximum size of a websocket frame., --origin=<origin>, Ensure clients send the specified origin header upon handshake., --pipein=<path/file>, Creates a named pipe (FIFO) that reads from on the given path/file., --pipeout=<path/file>, Creates a named pipe (FIFO) that writes to the given path/file., --strict, Parse messages using strict mode. See man page for more details., --ssl-cert=<cert.crt>, Path to SSL certificate., --ssl-key=<priv.key>, Path to SSL private key., ## Roadmap ##

  • Support for epoll and kqueue
  • Add more command line options
  • Add configuration file
  • Please feel free to open an issue to discuss a new feature.

License

MIT Licensed

Contributing

Any help on gwsocket is welcome. The most helpful way is to try it out and give
feedback. Feel free to use the Github issue tracker and pull requests to
discuss and submit code changes.

Enjoy!

主要指標

概覽
名稱與所有者allinurl/gwsocket
主編程語言C
編程語言Makefile (語言數: 4)
平台
許可證MIT License
所有者活动
創建於2016-05-02 04:22:41
推送於2024-09-19 23:20:21
最后一次提交2024-09-19 18:20:15
發布數4
最新版本名稱v0.4 (發布於 2023-03-10 20:37:42)
第一版名稱v0.1 (發布於 2016-05-02 18:17:32)
用户参与
星數784
關注者數30
派生數69
提交數181
已啟用問題?
問題數46
打開的問題數10
拉請求數5
打開的拉請求數0
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?