Quick Start
Get a RustySocks server running in under 5 minutes!
Step 1: Install RustySocks
cargo install rusty-socks
Step 2: Create Configuration
Create a .env file with minimal configuration:
# Server Configuration
SERVER_HOST=0.0.0.0
SERVER_PORT=8080
# Security (Generate secure values for production!)
JWT_SECRET=your-secret-key-change-this
ENCRYPTION_KEY=your-32-byte-encryption-key-here
# Optional: Enable TLS
# TLS_CERT_PATH=/path/to/cert.pem
# TLS_KEY_PATH=/path/to/key.pem
Step 3: Run the Server
rustysocks serve
You should see:
[INFO] RustySocks v0.1.0 starting...
[INFO] Server listening on ws://0.0.0.0:8080
[INFO] Security checks passed
[INFO] Ready to accept connections
Step 4: Connect a Client
Using JavaScript/TypeScript
const ws = new WebSocket('ws://localhost:8080/ws');
ws.onopen = () => {
console.log('Connected to RustySocks!');
// Send authentication
ws.send(JSON.stringify({
type: 'AUTH',
payload: {
token: 'your-jwt-token'
}
}));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log('Received:', message);
};
// Join a room
ws.send(JSON.stringify({
type: 'JOIN_ROOM',
payload: {
room_id: 'general'
}
}));
// Broadcast a message
ws.send(JSON.stringify({
type: 'BROADCAST',
payload: {
room_id: 'general',
message: 'Hello, RustySocks!'
}
}));
Using the RustySocks Client Library
import { RustySocksClient } from 'rustysocks-client';
const client = new RustySocksClient('ws://localhost:8080');
await client.connect();
await client.authenticate('your-jwt-token');
await client.joinRoom('general');
client.on('message', (msg) => {
console.log('Received:', msg);
});
await client.broadcast('general', 'Hello, RustySocks!');
Step 5: Monitor Your Server
Check server health:
curl http://localhost:8080/health
View metrics:
curl http://localhost:8080/metrics
Example: Simple Chat Server
Here's a complete example of a chat server:
Server Configuration
use rusty_socks::{Server, ServerConfig, MessageHandler, Message};
use std::sync::Arc;
#[derive(Clone)]
struct ChatHandler;
#[async_trait::async_trait]
impl MessageHandler for ChatHandler {
async fn handle_message(
&self,
message: Message,
context: Arc<rusty_socks::Context>
) -> rusty_socks::Result<()> {
match message.message_type.as_str() {
"CHAT" => {
// Broadcast to all users in the room
context.broadcast_to_room(
&message.room_id.unwrap_or_default(),
message
).await?;
}
_ => {}
}
Ok(())
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ServerConfig::from_env()?;
let server = Server::builder()
.config(config)
.handler(ChatHandler)
.build()
.await?;
server.run().await?;
Ok(())
}
HTML Client
<!DOCTYPE html>
<html>
<head>
<title>RustySocks Chat</title>
</head>
<body>
<div id="messages"></div>
<input type="text" id="input" placeholder="Type a message...">
<button onclick="sendMessage()">Send</button>
<script>
const ws = new WebSocket('ws://localhost:8080/ws');
const messages = document.getElementById('messages');
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'CHAT') {
const div = document.createElement('div');
div.textContent = msg.payload.message;
messages.appendChild(div);
}
};
function sendMessage() {
const input = document.getElementById('input');
ws.send(JSON.stringify({
type: 'CHAT',
room_id: 'general',
payload: {
message: input.value
}
}));
input.value = '';
}
</script>
</body>
</html>
What's Next?
Now that you have a basic server running:
- Secure your server: Follow the TLS Configuration Guide
- Add authentication: Implement JWT Authentication
- Scale up: Learn about Clustering
- Monitor performance: Set up Metrics & Monitoring
Troubleshooting
Connection Refused
Ensure the server is running and the port is not blocked:
netstat -an | grep 8080
Authentication Failed
Check your JWT secret matches between server and client:
echo $JWT_SECRET
Performance Issues
Enable debug logging:
RUST_LOG=debug rustysocks serve
For more help, see our Troubleshooting Guide.