How faye/websocket-driver-ruby works
websocket-driver is a Ruby WebSocket protocol engine that separates protocol handling from TCP I/O. A consumer creates a client or server driver, supplies incoming stream bytes to it, and writes its output to the socket. Server drivers parse HTTP requests and select a protocol; client drivers perform and validate the handshake. Once open, protocol drivers encode and parse frames, reassemble messages, handle control frames and emit events. The tree and README support these capabilities; several internal protocol modules were not sampled, so their detailed wiring is omitted where uncertain.
Main entry points: client.rb Client Driver · server.rb Server Driver · hybi.rb Hybi Protocol · driver.rb Rack Selection
Components 20
Driver API
- Driver Factory
lib/websocket/driver.rb - Server Driver
lib/websocket/driver/server.rb - Client Driver
lib/websocket/driver/client.rb - Rack Selection
lib/websocket/driver.rb - HTTP Proxy
lib/websocket/driver/proxy.rb
HTTP Handshake
- Request Parser
lib/websocket/http/request.rb - Response Parser
lib/websocket/http/response.rb - HTTP Headers
lib/websocket/http/headers.rb - Driver Headers
lib/websocket/driver/headers.rb
WebSocket Protocols
- Draft 75
lib/websocket/driver/draft75.rb - Draft 76
lib/websocket/driver/draft76.rb - Hybi Protocol
lib/websocket/driver/hybi.rb - Frame Codec
lib/websocket/driver/hybi/frame.rb - Message Assembly
lib/websocket/driver/hybi/message.rb - Payload Masking
lib/websocket/mask.rb - Extensions
Stream Runtime
- Stream Reader
lib/websocket/driver/stream_reader.rb - Event Emitter
lib/websocket/driver/event_emitter.rb
Other components
- Application
- TCP Socket
Connections 30
- Application → Driver Factory: creates driver
- Driver Factory → Client Driver: creates client
- Driver Factory → Server Driver: creates server
- Driver Factory → Rack Selection: selects protocol
- Server Driver → Request Parser: parses request
- Server Driver → Rack Selection: selects protocol
- Rack Selection → Hybi Protocol: selects RFC
- Rack Selection → Draft 75: selects draft
- Rack Selection → Draft 76: selects draft
- Client Driver → Response Parser: parses response
- Request Parser → HTTP Headers: parses headers
- Response Parser → HTTP Headers: parses headers
- Server Driver → Driver Headers: sets headers
- Client Driver → Driver Headers: sets headers
- Client Driver → HTTP Proxy: creates proxy
- HTTP Proxy → TCP Socket: writes CONNECT
- Client Driver → TCP Socket: writes handshake
- Server Driver → TCP Socket: writes response
- TCP Socket → Server Driver: supplies bytes
- TCP Socket → Client Driver: supplies bytes
- Client Driver → Hybi Protocol: uses protocol
- Hybi Protocol → Frame Codec: encodes frames
- Hybi Protocol → Message Assembly: assembles messages
- Frame Codec → Payload Masking: masks payload
- Hybi Protocol → Extensions: negotiates extensions
- Hybi Protocol → Stream Reader: buffers stream
- Server Driver → Event Emitter: emits events
- Client Driver → Event Emitter: emits events
- Hybi Protocol → Event Emitter: emits events
- Application → TCP Socket: provides I/O