Tổng quan
Thay vì liên tục gọi REST API để kiểm tra các cập nhật, bạn có thể mở một kết nối Socket.IO và để PHS chủ động đẩy dữ liệu đến bạn ngay khi dữ liệu thay đổi. Đây là phương thức được khuyến nghị để xây dựng:- Priceboard cập nhật theo thời gian thực
- Theo dõi trạng thái lệnh theo thời gian thực (đặt lệnh / khớp lệnh / hủy lệnh / sửa lệnh)
- Cập nhật sức mua và danh mục đầu tư theo thời gian thực
Hai kết nối này sử dụng host, path và định dạng message khác nhau. Việc nhầm lẫn giữa hai kết nối là lỗi tích hợp phổ biến nhất — xem phần Troubleshooting bên dưới.
Điều kiện cần thiết
- Thư viện Socket.IO client. Các ví dụ bên dưới sử dụng
socket.io-clientcho Node.js. - Đối với kết nối Order / Asset, cần có
access_tokentừ login endpoint. - Số tài khoản giao dịch phụ để đăng ký nhận các cập nhật về lệnh và tài sản của chính tài khoản đó.
Kết nối 1: Market Data
Kết nối đến cổng dữ liệu thị trường của PHS và nhận dữ liệu giá theo thời gian thực cho bất kỳ mã chứng khoán nào mà bạn đăng ký. Không yêu cầu xác thực.socket.emit("subscribe", ...) với mã chứng khoán khác trong topic.
Để dừng theo dõi một mã chứng khoán, sử dụng cùng topic đó với socket.emit("unsubscribe", ...).
Kết nối 2: Order / Asset
Kết nối đến cổng tài khoản của PHS và nhận các cập nhật về lệnh, sức mua và danh mục đầu tư của chính tài khoản. Yêu cầuaccess_token.
Tìm hiểu về event account
Tất cả các cập nhật liên quan đến tài khoản — thay đổi lệnh, thay đổi sức mua và thay đổi danh mục — đều được gửi thông qua cùng một event account.
Không có các event riêng biệt như OM, CI hoặc SE. Thay vào đó, cần kiểm tra trường eventtype bên trong payload để xác định loại cập nhật nhận được:
Tham chiếu các trường dữ liệu
Các bảng bên dưới liệt kê những trường thường được sử dụng nhất. Tên trường được giữ nguyên theo cách đặt tên ngắn (legacy naming) — sử dụng phần này như bảng tra cứu.Các trường instrument (Market Data)
Các trường trade (Giao dịch khớp lệnh)
Các trường account khi eventtype = OM (cơ sở) hoặc OO (phái sinh)
Tài khoản cơ sở (FLEX) và tài khoản phái sinh (FDS) sử dụng tên trường hơi khác nhau cho cùng một khái niệm (ví dụ:
orderprice và order_price). Hãy sử dụng đúng tên trường tương ứng với loại tài khoản của bạn.Troubleshooting
Thực hành tốt nhất
- Lưu
access_tokenvà mọi client secret trên server, tuyệt đối không đặt trong JavaScript phía trình duyệt. - Gọi
unsubscribeđối với các mã chứng khoán hoặc tài khoản mà bạn không còn cần theo dõi để giảm lưu lượng không cần thiết. - Sử dụng một kết nối cho mỗi gateway và subscribe nhiều topic trên cùng một kết nối, thay vì mở một kết nối mới cho từng mã chứng khoán.
- Tuyệt đối không commit token thật vào source control — hãy coi token bị lộ giống như mật khẩu bị lộ.
