- Create apps/nextjs/server.ts custom server integrating WebSocket via ws - Update nextjs scripts to use custom server for dev and start - Update root start script to remove separate ws server process - Update client tRPC URL to connect to port 3000 in dev - Update nginx.conf to route /websockets to port 3000 - Update Dockerfile and run.sh for integrated server - Disable standalone ws server dev script - Add benchmark-memory.sh script Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
115 lines
2.9 KiB
Bash
Executable File
115 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Benchmark memory usage of the WebSocket server approach
|
|
# Usage: ./scripts/benchmark-memory.sh [approach]
|
|
# approach: "separate" (current: separate ws server) or "integrated" (custom Next.js server)
|
|
|
|
set -e
|
|
|
|
APPROACH="${1:-separate}"
|
|
WAIT_SECONDS="${2:-10}"
|
|
|
|
echo "============================================"
|
|
echo "Memory Benchmark: $APPROACH approach"
|
|
echo "============================================"
|
|
echo ""
|
|
|
|
measure_memory() {
|
|
local pid=$1
|
|
local label=$2
|
|
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
|
local rss
|
|
rss=$(ps -o rss= -p "$pid" 2>/dev/null | tr -d ' ')
|
|
if [ -n "$rss" ]; then
|
|
local rss_mb
|
|
rss_mb=$(echo "scale=2; $rss / 1024" | bc)
|
|
echo "$label (PID $pid): ${rss_mb} MB (RSS: ${rss} KB)"
|
|
echo "$rss"
|
|
else
|
|
echo "$label (PID $pid): unable to read memory"
|
|
echo "0"
|
|
fi
|
|
else
|
|
echo "$label: not running"
|
|
echo "0"
|
|
fi
|
|
}
|
|
|
|
cleanup() {
|
|
echo ""
|
|
echo "Cleaning up processes..."
|
|
for pid in "${PIDS[@]}"; do
|
|
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
|
kill "$pid" 2>/dev/null || true
|
|
fi
|
|
done
|
|
wait 2>/dev/null || true
|
|
echo "Done."
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
PIDS=()
|
|
TOTAL_RSS=0
|
|
|
|
if [ "$APPROACH" = "separate" ]; then
|
|
echo "Starting separate WebSocket server (current approach)..."
|
|
echo "---"
|
|
|
|
# Start the WebSocket server
|
|
node apps/websocket/wssServer.cjs &
|
|
WSS_PID=$!
|
|
PIDS+=("$WSS_PID")
|
|
|
|
# Start the Next.js server
|
|
node apps/nextjs/server.js &
|
|
NEXTJS_PID=$!
|
|
PIDS+=("$NEXTJS_PID")
|
|
|
|
echo "Waiting ${WAIT_SECONDS}s for processes to stabilize..."
|
|
sleep "$WAIT_SECONDS"
|
|
|
|
echo ""
|
|
echo "--- Memory Usage (Separate Approach) ---"
|
|
wss_mem=$(measure_memory "$WSS_PID" "WebSocket Server" | tail -1)
|
|
nextjs_mem=$(measure_memory "$NEXTJS_PID" "Next.js Server" | tail -1)
|
|
|
|
TOTAL_RSS=$((wss_mem + nextjs_mem))
|
|
TOTAL_MB=$(echo "scale=2; $TOTAL_RSS / 1024" | bc)
|
|
|
|
echo ""
|
|
echo "TOTAL: ${TOTAL_MB} MB (RSS: ${TOTAL_RSS} KB)"
|
|
|
|
elif [ "$APPROACH" = "integrated" ]; then
|
|
echo "Starting integrated custom Next.js server (new approach)..."
|
|
echo "---"
|
|
|
|
# Start the custom server (Next.js + WebSocket integrated)
|
|
node apps/nextjs/customServer.cjs &
|
|
CUSTOM_PID=$!
|
|
PIDS+=("$CUSTOM_PID")
|
|
|
|
echo "Waiting ${WAIT_SECONDS}s for process to stabilize..."
|
|
sleep "$WAIT_SECONDS"
|
|
|
|
echo ""
|
|
echo "--- Memory Usage (Integrated Approach) ---"
|
|
custom_mem=$(measure_memory "$CUSTOM_PID" "Custom Server (Next.js + WS)" | tail -1)
|
|
|
|
TOTAL_RSS=$custom_mem
|
|
TOTAL_MB=$(echo "scale=2; $TOTAL_RSS / 1024" | bc)
|
|
|
|
echo ""
|
|
echo "TOTAL: ${TOTAL_MB} MB (RSS: ${TOTAL_RSS} KB)"
|
|
|
|
else
|
|
echo "Unknown approach: $APPROACH"
|
|
echo "Usage: $0 [separate|integrated] [wait_seconds]"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
echo "Benchmark complete for: $APPROACH"
|
|
echo "Total memory: ${TOTAL_MB} MB"
|
|
echo "============================================"
|