Real-time communication with Socket.IO including connection management, events, rooms, and error handling. Use when working on TitanMirror or any real-time applications.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add Sir-chawakorn/power-ranger-toolkit --skill socket-io --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Socket Io?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/sir-chawakorn-socket-io)More formats (shields.io, HTML) on the badges page.
---
name: socket-io
description: Real-time communication with Socket.IO including connection management, events, rooms, and error handling. Use when working on TitanMirror or any real-time applications.
---
# 🔌 Socket.IO Skill
## Server Setup (Node.js)
```javascript
const { Server } = require('socket.io');
const io = new Server(server, {
cors: { origin: '*' },
pingTimeout: 60000,
pingInterval: 25000
});
io.on('connection', (socket) => {
console.log('Client connected:', socket.id);
socket.on('disconnect', (reason) => {
console.log('Disconnected:', reason);
});
});
```
---
## Client Setup
### JavaScript
```javascript
const socket = io('http://localhost:3000');
socket.on('connect', () => {
console.log('Connected!', socket.id);
});
socket.on('connect_error', (err) => {
console.error('Connection error:', err.message);
});
```
### Android (Kotlin)
```kotlin
val options = IO.Options().apply {
reconnection = true
reconnectionAttempts = 5
reconnectionDelay = 1000
}
val socket = IO.socket("http://192.168.1.x:3000", options)
socket.connect()
```
---
## Event Patterns
### Emit & Listen
```javascript
// Client → Server
socket.emit('frame', { data: base64Image });
// Server → Client
io.emit('command', { type: 'click', x: 100, y: 200 });
// Server → Specific client
io.to(socketId).emit('private', { message: 'hello' });
```
### Acknowledgement
```javascript
// Client
socket.emit('upload', file, (response) => {
console.log('Server confirmed:', response);
});
// Server
socket.on('upload', (file, callback) => {
saveFile(file);
callback({ success: true });
});
```
---
## Rooms
```javascript
// Join room
socket.join('device-' + deviceId);
// Send to room
io.to('device-' + deviceId).emit('frame', frameData);
// Leave room
socket.leave('device-' + deviceId);
```
---
## Binary Data (TitanMirror)
```javascript
// Server receives frame
socket.on('frame', (data) => {
// data is Buffer or ArrayBuffer
const buffer = Buffer.from(data);
broadcastFrame(buffer);
});
// Client sends frame (Android)
val bytes = compressToJPEG(bitmap)
socket.emit("frame", bytes)
```
---
## Error Handling
```javascript
socket.on('connect_error', (error) => {
if (error.message === 'xhr poll error') {
// Network issue - will auto-retry
}
});
socket.on('disconnect', (reason) => {
if (reason === 'io server disconnect') {
socket.connect(); // Manual reconnect
}
});
```
---
## Performance Tips
| Tip | Why |
|-----|-----|
| Use binary instead of base64 | 33% smaller |
| Compress images (JPEG 50%) | Reduce bandwidth |
| Debounce frequent events | Prevent flooding |
| Use rooms for targeting | Avoid broadcast all |
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!