Websocket for Nim
Go to file
andri lim d60df8176d
restructure CI jobs to parallelise autobahn test (#70)
previously we are using bash to run parallel autobahn test.
now we leverage CI jobs to run parallel tests.

with the inclusion of compression extension,
the autobahn test suite took significant time
to pass. move it to manually triggered CI
as it cannot make the main CI to fail anyway.

we only run basic autobahn tests in regular CI.
2021-07-19 10:15:52 -06:00
.github/workflows restructure CI jobs to parallelise autobahn test (#70) 2021-07-19 10:15:52 -06:00
autobahn rename nim-ws to nim-websock 2021-06-29 08:50:29 +07:00
examples Make HttpServer a case object (#84) 2021-07-15 14:17:55 -06:00
tests add support for DNS resolution (#81) 2021-07-14 18:51:39 -06:00
websock Make HttpServer a case object (#84) 2021-07-15 14:17:55 -06:00
.editorconfig Implement web socket handshake 2020-12-01 18:13:59 +05:30
.gitattributes add deflate compression test cases 2021-06-20 14:50:54 +07:00
.gitignore add .gitignore 2021-05-21 10:25:31 +07:00
Readme.md add websock logo to readme.md 2021-06-29 08:50:34 +07:00
websock.nimble rename nim-ws to nim-websock 2021-06-29 08:50:29 +07:00
websock.svg add websock logo to readme.md 2021-06-29 08:50:34 +07:00

Readme.md

Websock Logo

Websocket for Nim

Github action

This is an implementation of Websocket protocol for Nim. nim-websock have 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

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