nim-websock icon indicating copy to clipboard operation
nim-websock copied to clipboard

Websocket for Nim

Websock Logo

Websocket for Nim

Github action

This is an implementation of Websocket protocol for Nim and chronos.

nim-websock includes both client and server in regular ws and wss(secure) mode.

It also pass all autobahn tests Autobahn summary report.

Building and testing

Install dependencies:

nimble install -d

Starting HTTP server:

nim c -r examples/server.nim

Testing Server Response:

curl --location --request GET 'http://localhost:8888'

Testing Websocket Handshake:

curl --include \
   --no-buffer \
   --header "Connection: Upgrade" \
   --header "Upgrade: websocket" \
   --header "Host: example.com:80" \
   --header "Origin: http://example.com:80" \
   --header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
   --header "Sec-WebSocket-Version: 13" \
   http://localhost:8888/ws

Roadmap

  • [x] Framing
    • [x] Text Messages
    • [x] Binary Messages
  • [x] Pings/Pongs
  • [x] Reserved Bits
  • [x] Opcodes
    • [x] Non-control Opcodes
    • [x] Control Opcodes
  • [x] Fragmentation
  • [x] UTF-8 Handling
  • [x] Close Handling
    • [x] Basic close behavior
    • [x] Close frame structure
    • [x] Payload length
    • [x] Valid close codes
    • [x] Invalid close codes
  • [x] Integrate Autobahn Test suite.
  • [x] WebSocket Compression
  • [x] WebSocket Extensions
  • [ ] Performance