Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Ratchet is a fast, robust, lightweight and fully asynchronous implementation of RFC6455 (The WebSocket protocol).

License

NotificationsYou must be signed in to change notification settings

graphform/ratchet

Repository files navigation




Ratchet

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.

Crates.io

Documentation

Features

  • Implement your own extensions usingratchet_ext.
  • Per-message deflate withratchet_deflate or enable with thedeflatefeature.
  • Split WebSocket with thesplit feature.

Testing

Ratchet is fully tested and passes every Autobahn test for both client and server modes.

Examples

Client

#[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(()),}}}

Server

#[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(())}

Deflate

letmut websocket = ratchet::accept_with(      socket,WebSocketConfig::default(),DeflateProvider,SubprotocolRegistry::default(),).await?;

Split

// 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(()),}}

License

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

Stars

Watchers

Forks

Packages

No packages published

Contributors4

  •  
  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp