- Notifications
You must be signed in to change notification settings - Fork14
Ratchet is a fast, robust, lightweight and fully asynchronous implementation of RFC6455 (The WebSocket protocol).
License
graphform/ratchet
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Ratchet is a fast, robust, lightweight and fully asynchronous implementationofRFC6455 (The WebSocket protocol). Complete with an optionalimplementation ofRFC7692 (Compression Extensions For WebSocket).
Ratchet powersSwimOS on Rust; a framework for real-time streaming dataapplications.
- Implement your own extensions usingratchet_ext.
- Per-message deflate withratchet_deflate or enable with the
deflate
feature. - Split WebSocket with the
split
feature.
Ratchet is fully tested and passes every Autobahn test for both client and server modes.
#[tokio::main]asyncfnmain() ->Result<(),Error>{let stream =TcpStream::connect("127.0.0.1:9001").await?;let upgraded =subscribe(WebSocketConfig::default(), stream,"ws://127.0.0.1/hello".try_into_request()?,).await?;letUpgradedClient{ socket, subprotocol} = upgraded;letmut buf =BytesMut::new();loop{match websocket.read(&mut buf).await?{Message::Text =>{ websocket.write(&mut buf,PayloadType::Text).await?; buf.clear();}Message::Binary =>{ websocket.write(&mut buf,PayloadType::Binary).await?; buf.clear();}Message::Ping |Message::Pong =>{// Ping messages are transparently handled by Ratchet}Message::Close(_) =>breakOk(()),}}}
#[tokio::main]asyncfnmain() ->Result<(),Error>{let listener =TcpListener::bind("127.0.0.1:9001").await?;letmut incoming =TcpListenerStream::new(listener);whileletSome(socket) = incoming.next().await{let socket = socket?;// An upgrader contains information about what the peer has requested.letmut upgrader = ratchet::accept_with( socket,WebSocketConfig::default(),NoExtProvider,SubprotocolRegistry::default(),).await?;// You could opt to reject the connection// upgrader.reject(WebSocketResponse::new(404)?).await?;// continue;// Or you could reject the connection with headers// upgrader.reject(WebSocketResponse::with_headers(404, headers)?).await;// continue;letUpgradedServer{ request,mut websocket, subprotocol,} = upgrader.upgrade().await?;letmut buf =BytesMut::new();loop{match websocket.read(&mut buf).await?{Message::Text =>{ websocket.write(&mut buf,PayloadType::Text).await?; buf.clear();}Message::Binary =>{ websocket.write(&mut buf,PayloadType::Binary).await?; buf.clear();}Message::Ping |Message::Pong =>{// Ping messages are transparently handled by Ratchet}Message::Close(_) =>break,}}}Ok(())}
letmut websocket = ratchet::accept_with( socket,WebSocketConfig::default(),DeflateProvider,SubprotocolRegistry::default(),).await?;
// A split operation will only fail if the WebSocket is already closed.let(mut sender,mut receiver) = websocket.split()?;loop{match receiver.read(&mut buf).await?{Message::Text =>{ sender.write(&mut buf,PayloadType::Text).await?; buf.clear();}Message::Binary =>{ sender.write(&mut buf,PayloadType::Binary).await?; buf.clear();}Message::Ping |Message::Pong =>{}Message::Close(_) =>breakOk(()),}}
Ratchet is licensed under theApache License 2.0
About
Ratchet is a fast, robust, lightweight and fully asynchronous implementation of RFC6455 (The WebSocket protocol).
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.