Skip to content

เชื่อมต่อหลายภาษา (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 ข้อของการเชื่อมต่อ (สรุป):

  1. Connect (Dial/Connect): เปิด WebSocket connection ไปที่ URL พร้อม app_key
  2. รีบ Login (Auth): โยน JSON 7 fields + signature ด้วยคำสั่ง cmd: "auth" กลับไปภายใน 10 วินาที ทันที ไม่งั้นจะโดนตัด!!
  3. รอ reply status: ok: เมื่อระบบตอบกลับ type: "reply" + status: "ok" ถึงสามารถพิมพ์กดคำสั่ง cmd: "subscribe" ต่อไปได้

Released under the MIT License.