เชื่อมต่อหลายภาษา (Multi-Language)
RawPush ออกแบบมาบนมาตรฐานโปรโตคอลเปิด WebSocket (RFC 6455) นั่นแปลว่า... ไม่มีข้อจำกัดของเฟรมเวิร์กใด ๆ คุณสามารถใช้ Native WebSocket Library ในภาษาที่คุณถนัดเชื่อมต่อเข้ามาได้ทันที โดยไม่ต้องลง Library พิเศษของเรา
นี่คือตัวอย่างวิธี connect WebSocket และส่ง auth command ครั้งแรก ในภาษาต่าง ๆ:
🌐 1. JavaScript (Browser Native)
ใช้งานผ่าน new WebSocket() ที่มีติดมากับทุกเบราว์เซอร์สมัยใหม่
javascript
const PUBLIC_KEY = "pk_your_public_key";
const ws = new WebSocket(`wss://api.rawpush.com/ws?app_key=${PUBLIC_KEY}`);
ws.onopen = () => {
// สร้างโครงสร้างก้อนข้อมูล Authentication ให้ถูกต้อง 7 Fields
const tokenPayload = {
v: "v1",
purpose: "ws-auth",
sub: "usr_123456",
aud: "websocket",
iat: Date.now(),
exp: Date.now() + (10 * 60 * 1000), // หมดอายุ 10 นาที
jti: crypto.randomUUID()
};
// ส่งไปหา Server ทันที (มีเวลา 10 วินาทีก่อนโดน timeout)
ws.send(JSON.stringify({
cmd: 'auth',
token: tokenPayload,
signature: "d83c2...ลายเซ็นจาก_backend...a6f"
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if(msg.type === 'reply' && msg.status === 'ok' && msg.data?.session_id) {
console.log("✅ ยืนยันตัวตนผ่าน! Session ID:", msg.data.session_id);
}
};🟢 2. Node.js (ผ่านโมดูล ws)
ในเซิร์ฟเวอร์ Node.js หรือฝั่ง Command Line คุณสามารถใช้แพ็กเกจมาตรฐานยอดฮิตอย่าง ws
javascript
const WebSocket = require('ws');
const crypto = require('crypto');
const ws = new WebSocket('wss://api.rawpush.com/ws?app_key=pk_your_public_key');
ws.on('open', () => {
const tokenPayload = {
v: "v1",
purpose: "ws-auth",
sub: "usr_123456",
aud: "websocket",
iat: Date.now(),
exp: Date.now() + (10 * 60 * 1000),
jti: crypto.randomUUID()
};
ws.send(JSON.stringify({
cmd: 'auth',
token: tokenPayload,
signature: '...' // ต้องนำไปเซ็นที่ API ก่อน
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data);
console.log("📥 ได้รับข้อความ:", msg);
});🏎️ 3. Go (ผ่านแพ็กเกจ nhooyr.io/websocket)
ภาษา Go ถือเป็นราชาแห่ง Concurrency การเชื่อมต่อ WebSocket เป็นเรื่องที่ทำได้เรียบง่ายและทรงพลังด้วยแพ็กเกจ nhooyr หรือ gorilla
go
package main
import (
"context"
"encoding/json"
"log"
"time"
"nhooyr.io/websocket"
"nhooyr.io/websocket/wsjson"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
url := "wss://api.rawpush.com/ws?app_key=pk_your_public_key"
c, _, err := websocket.Dial(ctx, url, nil)
if err != nil {
log.Fatal("ต่อไม่ติด:", err)
}
defer c.Close(websocket.StatusInternalError, "close connection")
// 1. เตรียมก้อน Auth Payload 7 Fields
authCmd := map[string]interface{}{
"cmd": "auth",
"token": map[string]interface{}{
"v": "v1",
"purpose": "ws-auth",
"sub": "usr_123456",
"aud": "websocket",
"iat": time.Now().UnixMilli(),
"exp": time.Now().Add(10 * time.Minute).UnixMilli(),
"jti": "random_uuid",
},
"signature": "abcdef...",
}
// ส่ง auth command ไปหา Server
err = wsjson.Write(ctx, c, authCmd)
if err != nil {
log.Fatal("ส่งข้อมูลไม่ได้:", err)
}
// 2. loop รอรับ message
for {
var payload map[string]interface{}
err = wsjson.Read(ctx, c, &payload)
if err != nil {
log.Println("disconnect:", err)
return
}
log.Printf("📥 ได้รับ Event: %v", payload["event"])
}
}🐍 4. Python (ผ่าน websockets แบบ AsyncIO)
ในโลกการคำนวณของ AI หรือ Backend ยุคใหม่ การใช้ websockets ในโหมด async ทำให้ไม่บล็อกการคำนวณแอปคุณ
python
import asyncio
import websockets
import json
import time
import uuid
async def rawpush_listener():
uri = "wss://api.rawpush.com/ws?app_key=pk_your_public_key"
async with websockets.connect(uri) as ws:
# 1. เตรียบตัวแปรเวลาเป็นมิลลิวินาที
now_ms = int(time.time() * 1000)
# 2. จัดโครงสร้าง 7 ตัวแปรบังคับ
auth_cmd = {
"cmd": "auth",
"token": {
"v": "v1",
"purpose": "ws-auth",
"sub": "usr_123456",
"aud": "websocket",
"iat": now_ms,
"exp": now_ms + (10 * 60 * 1000),
"jti": str(uuid.uuid4())
},
"signature": "dfa9930f..."
}
await ws.send(json.dumps(auth_cmd))
# 3. loop รอรับ message (Infinite Loop)
while True:
response = await ws.recv()
msg = json.loads(response)
print(f"💥 ปิ๊ง! ได้รับ: {msg.get('event')} จาก {msg.get('type')}")
# เมื่อได้รับ reply + status ok แล้วค่อยทำการ subscribe ในลำดับต่อไป
asyncio.run(rawpush_listener())🔥 กฎเหล็ก 3 ข้อของการเชื่อมต่อ (สรุป):
- Connect (
Dial/Connect): เปิด WebSocket connection ไปที่ URL พร้อมapp_key- รีบ Login (
Auth): โยน JSON 7 fields + signature ด้วยคำสั่งcmd: "auth"กลับไปภายใน 10 วินาที ทันที ไม่งั้นจะโดนตัด!!- รอ reply
status: ok: เมื่อระบบตอบกลับtype: "reply"+status: "ok"ถึงสามารถพิมพ์กดคำสั่งcmd: "subscribe"ต่อไปได้
