No description
Find a file
Jacek Sieka 5e9bcac325
Fix leaks / update error handling (#178)
* modernise imports
* introduce `raises` for most `async` functions
* remove lots of spurious memory allocations and zeroing
* check decompression max size before allocating memory (!)
* simplify error handling when reading frames
* avoid blocking connection for too long just to send errors
* don't swallow original error when trying to send error to client
* need more mem for deflate
* fail autobahn job on autobahn failures
* deprecate handshakeTimeout
2025-11-21 07:27:51 +01:00
.github/workflows Common workflow and update Autobahn test runner (#175) 2025-09-19 15:49:34 +07:00
autobahn Common workflow and update Autobahn test runner (#175) 2025-09-19 15:49:34 +07:00
examples Fix leaks / update error handling (#178) 2025-11-21 07:27:51 +01:00
scripts Fix leaks / update error handling (#178) 2025-11-21 07:27:51 +01:00
tests Fix leaks / update error handling (#178) 2025-11-21 07:27:51 +01:00
websock Fix leaks / update error handling (#178) 2025-11-21 07:27:51 +01: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 Common workflow and update Autobahn test runner (#175) 2025-09-19 15:49:34 +07:00
config.nims Add setup/lock files (#120) 2022-07-12 21:33:50 +03:00
nim.cfg move -d:nimRawSetjmp to nim.cfg (#114) 2022-06-20 09:20:01 +02:00
Readme.md Fix CI badge URL (#162) 2024-04-24 12:14:09 +07:00
websock.nimble Fix leaks / update error handling (#178) 2025-11-21 07:27:51 +01:00
websock.svg add websock logo to readme.md 2021-06-29 08:50:34 +07:00

Websock Logo

Websocket for Nim

GH 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

  • 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