[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-en-1-1-all-websocket-compression-ep73-en-all--*":3,"academy-blog-translations-0aje18jzn8u64d1":89},{"data":4,"page":77,"perPage":77,"totalItems":77,"totalPages":77},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":84,"keywords":85,"locale":59,"published_at":86,"scheduled_at":13,"school_blog":81,"short_description":87,"status":79,"title":6,"updated":88,"updated_by":13,"slug":82,"views":83},"EP.73 Enhancing WebSocket Performance with Compression","sclblg987654321","school_blog_translations","\u003Cp>In EP.73, we explore how to enhance WebSocket communication by enabling WebSocket Compression. This technique compresses messages before they are sent through the WebSocket connection, helping reduce payload size, save bandwidth, and improve message delivery speed—especially in systems handling large or repetitive data, such as chat applications or real-time dashboards.\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>WebSocket Compression is particularly useful for systems with high-frequency communication and many simultaneous connections. It reduces overhead and ensures faster, more efficient data transfer between clients and servers.\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>Why Use WebSocket Compression?\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Enabling WebSocket Compression offers multiple performance benefits:\u003C\u002Fp>\u003Cul>\u003Cli>Reduced payload size: Messages are compressed before transmission, minimizing data usage\u003C\u002Fli>\u003Cli>Faster data transfer: Compression speeds up the delivery of large or repetitive messages\u003C\u002Fli>\u003Cli>Lower network\u002Fserver costs: It reduces resource consumption and helps scale efficiently\u003C\u002Fli>\u003Cli>Ideal for real-time applications: Works well for chat apps, collaborative tools, and dashboards\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>How to Enable WebSocket Compression\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>WebSocket Compression can be enabled on both your application server (Go) and the reverse proxy (e.g., NGINX) to improve overall system efficiency.\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>1. Enabling Compression in Go WebSocket Server\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Here’s how to enable message compression using Go and the \u003Ccode inline=\"\">gorilla\u002Fwebsocket\u003C\u002Fcode> library:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport (\n    \"log\"\n    \"net\u002Fhttp\"\n\n    \"github.com\u002Fgorilla\u002Fwebsocket\"\n)\n\nvar upgrader = websocket.Upgrader{\n    EnableCompression: true,\n    CheckOrigin: func(r *http.Request) bool {\n        return true\n    },\n}\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    conn, err := upgrader.Upgrade(w, r, nil)\n    if err != nil {\n        log.Println(\"Upgrade error:\", err)\n        return\n    }\n    defer conn.Close()\n\n    conn.EnableWriteCompression = true\n\n    for {\n        msgType, p, err := conn.ReadMessage()\n        if err != nil {\n            log.Println(\"Read error:\", err)\n            break\n        }\n\n        err = conn.WriteMessage(msgType, p)\n        if err != nil {\n            log.Println(\"Write error:\", err)\n            break\n        }\n    }\n}\n\nfunc main() {\n    http.HandleFunc(\"\u002F\", handler)\n    log.Println(\"WebSocket Server started on :8080\")\n    log.Fatal(http.ListenAndServe(\":8080\", nil))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cblockquote>\u003Cp>🔎 Note: The \u003Ccode inline=\"\">gorilla\u002Fwebsocket\u003C\u002Fcode> package supports permessage-deflate compression by setting \u003Ccode inline=\"\">EnableCompression: true\u003C\u002Fcode> on the \u003Ccode inline=\"\">Upgrader\u003C\u002Fcode> and calling \u003Ccode inline=\"\">conn.EnableWriteCompression = true\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>2. Configuring WebSocket Compression with NGINX\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>If you’re using NGINX as a reverse proxy in front of your WebSocket server, you can enable gzip compression to improve performance for compatible traffic.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext language-nginx\">http {\n    gzip on;\n    gzip_types application\u002Fjson text\u002Fplain;\n    gzip_min_length 1024;\n\n    server {\n        listen 80;\n\n        location \u002Fws {\n            proxy_pass http:\u002F\u002Flocalhost:8080;\n            proxy_http_version 1.1;\n            proxy_set_header Upgrade $http_upgrade;\n            proxy_set_header Connection \"upgrade\";\n            proxy_set_header Host $host;\n            proxy_cache_bypass $http_upgrade;\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cblockquote>\u003Cp>💡 While NGINX cannot compress raw WebSocket frames directly, it can still compress related HTTP traffic and fallback connections. Use \u003Ccode inline=\"\">permessage-deflate\u003C\u002Fcode> in your application for direct WebSocket compression.\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>3. Testing WebSocket Compression\u003C\u002Fh2>\u003Cp>To verify that compression is working properly, try the following:\u003C\u002Fp>\u003Cul>\u003Cli>✅ Send large or repetitive messages and observe how size and latency improve\u003C\u002Fli>\u003Cli>✅ Compare performance before and after enabling compression using browser DevTools or network monitoring tools\u003C\u002Fli>\u003Cli>✅ Test with multiple concurrent connections to see how compression affects throughput and system load\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Chr>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Challenge for You!\u003C\u002Fh3>\u003Cp>Try enabling compression in your WebSocket project and benchmark its effect using real-world data. How much bandwidth can you save?\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Next EP:\u003C\u002Fh3>\u003Cp>In EP.74, we’ll look into Adding Multilingual Support to WebSocket Chat Systems — enabling users to chat across different languages in real time with automatic detection and formatting 🌐\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp data-start=\"498\" data-end=\"834\">\u003Cstrong>Read more\u003C\u002Fstrong>\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp data-start=\"498\" data-end=\"834\">\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FGolang\">\u003Cstrong>Golang The Series\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp data-start=\"498\" data-end=\"834\">\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FJS2GO\">\u003Cstrong>JS2GO\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp data-start=\"498\" data-end=\"834\">\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fen\u002Fblogs\u002Fcategories\u002FTailwind%20CSS\">\u003Cstrong>10 Eps That Will Make You a Pro Tailwind CSS Overnight\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.school.th\">\u003Cstrong>Superdev School &nbsp;(Superdev)\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevschool\u002F\">\u003Cstrong>superdevschool\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevschool\">\u003Cstrong>superdevschool\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp class=\"\" data-start=\"5978\" data-end=\"6095\">\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002F\">\u003Cstrong>www.superdev.school\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>","118_11zon_fnwr5gm9h6.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fvp2idcuz47xrphb\u002F118_11zon_fnwr5gm9h6.webp","2026-03-04 08:47:25.633Z","",{"keywords":15,"locale":53,"school_blog":63},[16,23,28,33,38,43,48],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:47:24.440Z","cl84rkd6759ji3m","Web Performance","2026-04-10 16:13:28.376Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:40:54.493Z","te1uagqlfki2src","Bandwidth Optimization","2026-04-10 16:12:40.617Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:34:09.677Z","zy6p9bub451w3c8","NGINX","2026-04-10 16:08:08.440Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:20:11.547Z","ey3puyme01a9bsw","Go","2026-04-10 16:07:25.893Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:47:05.949Z","caufix9o52uw4bh","Real-Time Chat","2026-04-10 16:13:23.517Z",{"collectionId":17,"collectionName":18,"created":44,"created_by":13,"id":45,"name":46,"updated":47,"updated_by":13},"2026-03-04 08:34:06.204Z","uki2mmns85up9uf","Compression","2026-04-10 16:08:07.193Z",{"collectionId":17,"collectionName":18,"created":49,"created_by":13,"id":50,"name":51,"updated":52,"updated_by":13},"2026-03-04 08:34:00.920Z","ecac9y661or1xka","WebSocket","2026-04-10 16:08:05.227Z",{"code":54,"collectionId":55,"collectionName":56,"created":57,"flag":58,"id":59,"is_default":60,"label":61,"updated":62},"en","pbc_1989393366","locales","2026-01-22 11:00:02.726Z","twemoji:flag-united-states","qv9c1llfov2d88z",false,"English","2026-04-10 15:42:46.825Z",{"category":64,"collectionId":65,"collectionName":66,"created":13,"expand":67,"id":81,"slug":82,"updated":13,"views":83},"wqxt7ag2gn7xcmk","pbc_2105096300","school_blogs",{"category":68},{"blogIds":69,"collectionId":70,"collectionName":71,"created":72,"created_by":13,"id":64,"image":73,"image_alt":13,"image_path":74,"label":75,"name":76,"priority":77,"publish_at":78,"scheduled_at":13,"status":79,"updated":80,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:33:53.210Z","59ty92ns80w_15oc1implw.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fwqxt7ag2gn7xcmk\u002F59ty92ns80w_15oc1implw.png",{"en":76,"th":76},"Golang The Series",1,"2026-03-16 04:39:38.440Z","published","2026-04-25 02:32:15.470Z","0aje18jzn8u64d1","websocket-compression-ep73-en",282,"vp2idcuz47xrphb",[20,25,30,35,40,45,50],"2025-08-07 01:39:55.378Z","Learn how to boost WebSocket efficiency using compression techniques to reduce bandwidth and increase transmission speed, with examples using Go and NGINX","2026-04-25 02:48:15.052Z",{"th":82,"en":82}]