Tan Phat Media

WebSocket Tester - Test WebSocket Online

Kết nối và test WebSocket server trực tiếp trên trình duyệt

Kết nối
disconnected
Gửi tin nhắn

Sample WebSocket servers:

Messages (0)

Chưa có tin nhắn nào

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Kiểm thử kết nối WebSocket trên trình duyệt: cách dùng, đọc lỗi và những giới hạn phải biết

Công cụ mở một kết nối WebSocket từ chính trình duyệt của bạn tới máy chủ bạn chỉ định, gửi tin nhắn dạng văn bản và ghi lại toàn bộ luồng trao đổi kèm mốc thời gian. Vì dùng đúng giao diện WebSocket có sẵn của trình duyệt nên nó thừa hưởng cả ưu điểm lẫn những giới hạn cố hữu của môi trường này, phần dưới nói rõ từng giới hạn.

Tính năng nổi bật

  • Kết nối tới địa chỉ WebSocket bất kỳ theo giao thức ws hoặc wss
  • Hiển thị trạng thái kết nối theo ba mức đang ngắt, đang kết nối và đã kết nối
  • Gửi tin nhắn dạng văn bản, gửi được cả chuỗi JSON viết tay
  • Ghi nhật ký ba loại bản tin: gửi đi, nhận về và thông báo hệ thống, mỗi dòng kèm mốc thời gian
  • Hai địa chỉ mẫu cài sẵn để thử ngay mà không cần dựng máy chủ riêng
  • Nút xóa nhật ký để bắt đầu một phiên kiểm thử sạch
  • Nút sao chép toàn bộ nhật ký kèm nhãn loại bản tin để dán vào phiếu báo lỗi
  • Bấm lại nút kết nối khi đang mở sẽ đóng kết nối hiện tại

Vì sao kiểm thử WebSocket khó hơn kiểm thử API thông thường

Với một API dạng yêu cầu và phản hồi, bạn gửi một lệnh rồi nhận một kết quả, mọi thứ khép kín trong một lượt và dễ tái hiện. WebSocket thì khác về bản chất: kết nối được giữ mở, hai phía đều có thể chủ động gửi bất cứ lúc nào, và trạng thái tích lũy theo thời gian. Điều đó sinh ra những câu hỏi mà công cụ thử API thông thường không trả lời được: máy chủ có thực sự chấp nhận kết nối không, sau khi kết nối nó có gửi bản tin chào không, gửi một bản tin sai định dạng thì nó đóng kết nối hay lờ đi, và kết nối để yên có tự đứt sau bao lâu. Muốn trả lời, bạn cần một cửa sổ nhìn thẳng vào luồng trao đổi theo thời gian thực, có mốc thời gian để đo khoảng cách giữa các bản tin. Đó chính là thứ công cụ này cung cấp, và nó đủ cho phần lớn việc chẩn đoán ban đầu trước khi bạn viết mã xử lý thật.

Lợi ích khi sử dụng

  • Xác nhận máy chủ có chấp nhận kết nối hay không trước khi viết một dòng mã nào
  • Nhìn được toàn bộ luồng trao đổi kèm mốc thời gian, đủ để đo độ trễ thô
  • Thử nhanh phản ứng của máy chủ với dữ liệu sai định dạng mà không phải sửa mã nguồn
  • Không cần cài phần mềm, mở trình duyệt là dùng được ngay trên mọi hệ điều hành
  • Nhật ký sao chép được thành văn bản thuần nên dán vào phiếu báo lỗi rất gọn

Cách kiểm thử một máy chủ WebSocket

  1. 1Nhập địa chỉ máy chủ vào ô đầu tiên, hoặc bấm một trong hai địa chỉ mẫu để thử nhanh cơ chế vọng lại.
  2. 2Bấm nút kết nối và theo dõi nhật ký, bạn sẽ thấy dòng đang kết nối rồi tới dòng kết nối thành công nếu mọi thứ suôn sẻ.
  3. 3Gõ nội dung vào ô tin nhắn rồi gửi; nếu là dữ liệu JSON thì viết đúng cú pháp vì công cụ gửi nguyên chuỗi văn bản.
  4. 4Đọc các dòng nhận về, so mốc thời gian giữa lúc gửi và lúc nhận để ước lượng độ trễ vòng.
  5. 5Bấm sao chép để lấy toàn bộ nhật ký khi cần đính kèm vào phiếu báo lỗi, và bấm lại nút kết nối để đóng phiên.

Giới hạn lớn nhất: không đặt được tiêu đề tùy chỉnh

Đây là điều cần biết trước tiên vì nó chặn hẳn một cách xác thực rất phổ biến. Giao diện WebSocket của trình duyệt cố tình không cho mã JavaScript đặt tiêu đề tùy chỉnh vào yêu cầu bắt tay ban đầu, nên bạn không gửi được tiêu đề Authorization kèm mã thông báo. Đây là hạn chế của chính chuẩn web chứ không phải của công cụ, mọi công cụ chạy trong trình duyệt đều gặp như nhau. Hệ quả là nếu máy chủ yêu cầu mã thông báo trong tiêu đề, bạn sẽ luôn bị từ chối ở bước bắt tay và không có cách khắc phục từ đây. Ba cách xác thực còn dùng được là: đính mã thông báo vào phần truy vấn của địa chỉ, dựa vào cookie nếu máy chủ cùng miền với trang đang mở, hoặc kết nối trước rồi gửi bản tin đầu tiên chứa thông tin xác thực. Cách thứ nhất tiện nhất khi thử nhưng cần cảnh giác vì địa chỉ đầy đủ thường bị ghi vào nhật ký máy chủ và nhật ký thiết bị trung gian. Nếu bắt buộc phải đặt tiêu đề, hãy dùng công cụ chạy ngoài trình duyệt như wscat trên dòng lệnh.

Vì sao thông báo lỗi kết nối luôn chung chung

Khi kết nối thất bại, nhật ký chỉ hiện đúng một dòng báo lỗi mà không kèm nguyên nhân, và đây không phải do công cụ viết sơ sài. Chuẩn WebSocket quy định rõ rằng sự kiện lỗi không được cung cấp chi tiết cho mã JavaScript, nhằm ngăn một trang web độc hại dùng WebSocket để dò quét mạng nội bộ của người truy cập rồi phân biệt máy nào tồn tại qua thông báo lỗi. Vì lý do bảo mật này, mọi thư viện và mọi công cụ chạy trong trình duyệt đều chỉ nhận được một sự kiện lỗi trống rỗng. Cách lấy thông tin thật là mở công cụ nhà phát triển của trình duyệt bằng phím F12, sang thẻ Mạng rồi lọc theo mục WS: ở đó bạn thấy mã trạng thái HTTP của lần bắt tay, và đây mới là manh mối hữu ích. Mã 404 nghĩa là sai đường dẫn, mã 401 hoặc 403 nghĩa là bị chặn vì xác thực hoặc vì tiêu đề Origin không được chấp nhận, mã 502 nghĩa là máy chủ trung gian không chuyển tiếp được kết nối. Thẻ Bảng điều khiển cũng thường in một dòng mô tả rõ hơn thứ mà mã JavaScript không thấy được.

Đọc mã đóng kết nối để biết chuyện gì đã xảy ra

Mỗi lần kết nối đóng lại đều đi kèm một mã số theo chuẩn, và biết vài mã thông dụng sẽ tiết kiệm rất nhiều thời gian đoán mò. Mã 1000 là đóng bình thường, tức một trong hai phía chủ động kết thúc đúng quy trình. Mã 1001 nghĩa là một phía sắp biến mất, thường gặp khi người dùng đóng tab hoặc khi máy chủ đang tắt để nâng cấp. Mã 1006 là mã hay gặp nhất khi có sự cố và cũng dễ hiểu nhầm nhất: nó nghĩa là kết nối đứt mà không có khung đóng nào được gửi, và bản thân mã này do trình duyệt tự sinh ra chứ không phải máy chủ gửi về, nên nó thường phản ánh vấn đề về mạng, về thiết bị trung gian hoặc máy chủ ngừng đột ngột. Mã 1008 nghĩa là máy chủ từ chối vì vi phạm chính sách của nó, còn 1011 nghĩa là máy chủ gặp lỗi nội bộ. Lưu ý là công cụ này chỉ ghi dòng đã ngắt kết nối chứ không hiển thị mã số, nên muốn xem mã bạn vẫn phải mở thẻ Mạng trong công cụ nhà phát triển.

Kết nối tự đứt sau một lúc và chuyện nhịp tim

Một hiện tượng khiến nhiều người tưởng máy chủ bị lỗi: mở kết nối, không làm gì trong khoảng một phút, rồi thấy kết nối tự đóng. Thủ phạm gần như luôn là thiết bị trung gian trên đường đi chứ không phải hai đầu. Máy chủ proxy ngược, bộ cân bằng tải và tường lửa doanh nghiệp đều có ngưỡng thời gian chờ cho kết nối im lặng, giá trị mặc định phổ biến quanh 60 giây; Nginx chẳng hạn đóng kết nối không có dữ liệu sau 60 giây nếu bạn không tăng thông số thời gian chờ đọc. Giải pháp tiêu chuẩn là cơ chế nhịp tim: một phía định kỳ gửi khung ping và phía kia trả lời bằng khung pong, dòng dữ liệu đều đặn đó giữ cho thiết bị trung gian không coi kết nối là bỏ hoang. Điều đáng nói là mã JavaScript trong trình duyệt không gửi hay đọc được khung ping và pong ở tầng giao thức, vì chuẩn không mở giao diện đó ra. Do vậy các thư viện chạy trên trình duyệt đều tự chế nhịp tim ở tầng ứng dụng bằng cách gửi một bản tin quy ước rồi chờ phản hồi. Trong công cụ này, bạn mô phỏng được điều đó bằng cách tự gửi một bản tin ngắn mỗi khoảng ba mươi giây.

Những kiểu dữ liệu và kịch bản công cụ không xử lý được

Ô nhập tin nhắn chỉ gửi được văn bản, nên bạn không gửi được dữ liệu nhị phân dạng khung ArrayBuffer hay Blob mà nhiều giao thức thời gian thực dùng cho luồng âm thanh, hình ảnh hay dữ liệu nén. Ở chiều ngược lại, nếu máy chủ gửi về dữ liệu nhị phân thì trình duyệt trả cho mã JavaScript một đối tượng Blob, và nhật ký sẽ hiện một dòng khó đọc thay vì nội dung thật. Công cụ cũng không cho khai báo giao thức con trong bước bắt tay, thứ mà một số máy chủ bắt buộc phải có để chấp nhận kết nối, chẳng hạn các hệ thống dùng chuẩn STOMP hoặc GraphQL qua WebSocket. Ngoài ra không có tính năng tự kết nối lại khi đứt, không hẹn giờ gửi lặp, và nhật ký không được lưu lại nên tải trang là mất sạch. Một điểm nữa liên quan tới giao thức: các thư viện thời gian thực phổ biến như Socket.IO không phải WebSocket thuần mà bọc thêm một lớp định dạng riêng và có thể chuyển sang cơ chế khác khi WebSocket không dùng được, nên kết nối trực tiếp vào điểm cuối của chúng bằng công cụ này thường thất bại hoặc trả về những chuỗi khó hiểu.

Câu hỏi thường gặp (FAQ)

Có gửi được tiêu đề Authorization kèm mã thông báo không?

Không. Giao diện WebSocket của trình duyệt không cho mã JavaScript đặt tiêu đề tùy chỉnh trong bước bắt tay, đây là hạn chế của chuẩn web nên mọi công cụ chạy trong trình duyệt đều như vậy. Hãy đính mã thông báo vào phần truy vấn của địa chỉ, hoặc gửi nó trong bản tin đầu tiên sau khi kết nối.

ws và wss khác nhau thế nào?

Giao thức ws truyền không mã hóa, tương ứng với http; còn wss chạy trên TLS nên nội dung được mã hóa, tương ứng với https. Trên môi trường thật luôn phải dùng wss. Ngoài ra vì trang này chạy trên https, trình duyệt sẽ chặn kết nối ws tới địa chỉ công khai theo quy tắc nội dung hỗn hợp.

Vì sao báo lỗi kết nối mà không nói lý do?

Vì chuẩn WebSocket cố tình không cung cấp chi tiết lỗi cho mã JavaScript, nhằm ngăn trang web độc hại dùng WebSocket để dò quét mạng nội bộ của người truy cập. Muốn biết nguyên nhân thật, hãy mở công cụ nhà phát triển bằng F12, sang thẻ Mạng và lọc theo mục WS để xem mã trạng thái của lần bắt tay.

Mã đóng 1006 nghĩa là gì?

Nghĩa là kết nối đứt bất thường mà không có khung đóng nào được gửi đi. Mã này do chính trình duyệt sinh ra chứ không phải máy chủ gửi về, nên nó thường phản ánh vấn đề về mạng, về thiết bị trung gian trên đường truyền, hoặc máy chủ ngừng đột ngột chứ không phải một quyết định có chủ đích.

Vì sao kết nối tự đóng sau khoảng một phút không làm gì?

Gần như luôn do thiết bị trung gian như proxy ngược, bộ cân bằng tải hay tường lửa đóng kết nối im lặng theo ngưỡng thời gian chờ, giá trị mặc định phổ biến quanh 60 giây. Cách xử lý chuẩn là dùng cơ chế nhịp tim, tức định kỳ gửi một bản tin ngắn để giữ cho dòng dữ liệu không bị coi là bỏ hoang.

Gửi được khung ping và pong không?

Không. Chuẩn web không mở giao diện cho mã JavaScript gửi hay đọc khung ping và pong ở tầng giao thức, việc đó do trình duyệt tự xử lý ngầm. Các thư viện chạy trên trình duyệt đều tự chế nhịp tim ở tầng ứng dụng, và bạn mô phỏng được bằng cách tự gửi một bản tin ngắn mỗi khoảng ba mươi giây.

Gửi dữ liệu nhị phân được không?

Không. Ô nhập chỉ gửi được văn bản nên các khung dạng ArrayBuffer hay Blob không tạo được từ đây. Nếu máy chủ gửi về dữ liệu nhị phân, trình duyệt trả về một đối tượng Blob và nhật ký sẽ hiện một dòng khó đọc thay vì nội dung thật.

Kết nối vào máy chủ Socket.IO được không?

Thường là không như bạn mong đợi. Socket.IO không phải WebSocket thuần mà bọc thêm một lớp định dạng riêng và có cơ chế chuyển sang phương thức khác khi cần. Kết nối trực tiếp vào điểm cuối của nó bằng công cụ này thường thất bại hoặc trả về những chuỗi mã khó hiểu. Hãy dùng thư viện khách chính thức của Socket.IO.

Khai báo giao thức con trong bước bắt tay được không?

Không, công cụ không có ô nhập cho phần này. Một số hệ thống bắt buộc phải khai báo giao thức con mới chấp nhận kết nối, ví dụ các máy chủ dùng chuẩn STOMP hoặc GraphQL qua WebSocket. Với những trường hợp đó bạn cần công cụ dòng lệnh như wscat hoặc tự viết một đoạn mã ngắn.

Thử máy chủ chạy trên máy tôi qua ws có được không?

Có thể không được. Trang này phục vụ qua https nên trình duyệt áp quy tắc nội dung hỗn hợp và chặn kết nối ws; riêng địa chỉ localhost thì tùy trình duyệt có thể được miễn trừ. Nếu bị chặn, hãy chạy một trang thử ngay trên máy hoặc dùng công cụ dòng lệnh thay vì kiểm thử qua trang web công khai.

Hai địa chỉ mẫu dùng để làm gì?

Đó là các máy chủ vọng lại công khai: bạn gửi gì chúng trả lại đúng nội dung đó. Chúng dùng để kiểm tra rằng mạng của bạn cho phép kết nối WebSocket đi ra và công cụ hoạt động bình thường. Lưu ý các dịch vụ công khai có thể tạm ngừng hoặc giới hạn lượt truy cập, nên lỗi ở đó chưa chắc là lỗi bên bạn.

Nội dung tin nhắn tôi gửi có bị lưu lại không?

Công cụ không lưu gì và không gửi bản sao đi đâu, kết nối được mở thẳng từ trình duyệt của bạn tới máy chủ đích. Nhưng bản thân máy chủ đích thì thấy toàn bộ nội dung, nên tuyệt đối đừng gửi mã thông báo thật hay dữ liệu nhạy cảm qua các máy chủ vọng lại công khai.

Từ khóa liên quan

  • websocket là gì
  • test websocket online
  • kiểm tra kết nối websocket
  • ws và wss khác nhau
  • websocket close code 1006
  • lỗi websocket connection failed
  • websocket không gửi được header
  • xác thực websocket bằng token
  • heartbeat ping pong websocket
  • websocket timeout sau 60 giây
  • nginx proxy websocket
  • socket.io khác websocket
  • wscat công cụ dòng lệnh
  • mixed content chặn ws
  • websocket subprotocol
  • debug websocket trong devtools
  • gửi json qua websocket
  • websocket cho ứng dụng realtime
  • công cụ test websocket miễn phí
  • websocket handshake là gì

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
Tấn Phát Digital
Zalo
Facebook