Giới thiệu về Deepstream - Server mã nguồn mở để xây dựng ứng dụng realtime
Mở đầu Các ứng dụng realtime đang dần lấn át các ứng dụng web tĩnh truyền thống và thay vì phải reload lại page thì nội dung trang web sẽ được hiển thị realtime. Tuy nhiên nếu như tiện lợi về tính năng thì các trang web tích hợp realtime lại khá khó build Bài hôm nay ta sẽ tìm hiểu về server mã ...
Mở đầu
Các ứng dụng realtime đang dần lấn át các ứng dụng web tĩnh truyền thống và thay vì phải reload lại page thì nội dung trang web sẽ được hiển thị realtime. Tuy nhiên nếu như tiện lợi về tính năng thì các trang web tích hợp realtime lại khá khó build Bài hôm nay ta sẽ tìm hiểu về server mã nguồn mở deepstream.io để build các ứng dụng real time
Deepstream.io
Nếu đã từng xây dựng 1 ứng dụng realtime chắc hẳn ta cũng từng sử dụng đến khái niệm publish-subscribe trong đó subscribers lắng nghe các sư kiện trên channel, phần còn lại sẽ publish các sự kiện đó. Đây là cơ chế phổ biến many-to-many comunication được spport bới các kỹ thuật băng thông rộng như Socket.io.
Tuy nhiên để xây dựng 1 server mã nguồn mở với perfomance tốt lại vừa linh hoạt như các ứng dụng giao dịch hay server game thì nhiều lập trình viên đã chọn deepstream
Deepstream là 1 server kiểu mới mà có thể xử lý dữ liệu realtime và hỗ trợ scale. End users và cácbackend services sẽ connect thông qua các lightweight SDKs được viêt bằng các ngôn ngữ khác nhau như js, swift hay java.
Deepstream được thiết kế để phát triển mạnh trong các hệ sinh thái nguồn mở, và đi kèm với một loạt các kết nối cơ sở dữ liệu cho phổ biến, lưu trữ hoặc bus nhắn. Nhưng điểm nổi bật nhất của deepstream là khả năng mở rộng và sự tin cậy cao khi kết nối.
Sử dụng Deepstream
Cài đặt
Deepstream có thể cài đặt trên MAc hay window, thông qua yum, apt hoặc thậm chí cài đặt bằng Docker Image. Chi tiết download tại đây
Configuration
Tất cả các cinfig ta cần thay đổi thì sẽ đều nằm hết trong config.yml trong thư mục conf (đối với Mac hoặc windows)
Khởi động server
Để khởi đông server ta đơn giản chỉ cần eepstream start
Get Client SDK
Để connect đến server deepstream ta cần SDK cho các ngôn ngữ tương ứng mà ta đã viết app. Ví dụ đối với ứng dụng nodejs thì ta cần SDK hỗ trợ javasript. Ta cần cài thêm
npm install deepstream.io-client-js.
Kết nói đến sẻveer
Cách đơn giản nhất để kết nối đến server deepstrem là ta sử dụng
var client = deepstream('localhost:6020').login().
Tuy nhiên thực tế thì sẽ có các option như client options hay các authenticate param. Ở đây ta sẽ ko đi sâu vào chi tiết
Data-sync
Data-sync của deepstream sử dụng khái niệm records. Record được định nghĩa thông qua unique name hoặc thời điểm get hay set dữ liệu
pizzaGuy = ds.record.getRecord( 'driver/14' )
Giá trị của record ta có thể set trực tiếp như sau
pizzaGuy.set({ name: 'John Doe', position: { x: 4234, y: 2454 }, speed: 22 })
hoặc đơn giản hơn
pizzaGuy.set( 'position.x', 4244 )
thậm chí client có thể subribe và thay dổi toàn bộ record
pizzaGuy.subscribe(( data )=>{ //... })
Sử dụng event
event thực chất chính là cơ chế pub-sub của deepstream. Tất cả các client đều có thể subribe 1 event
ds.event.subscribe( 'something-happened', data => {})
hoặc giải phóng nó
ds.event.emit( 'something-happened', { size: 'big' })
Xác thực và cấp quyền
Deepstream cung câp 1 số các cơ chế để xác thực các kết nối đến. Cụ thể ta có thể thiết lập bằng file config hoặc http webhook
Tất cả các request đã được xác thực và app sử dụng các ngôn ngữ hỗ trợ realtime thì gọi hết là Valve.
record: #an auctioned item auction/item/$sellerId/$itemId: #everyone can see the item and its price read: true #only users with canBid flag in their authData can bid #and bids can only be higher than the current price write: "user.data.canBid && data.price > oldData.price" #only the seller can delete the item delete: "user.id == $sellerId"
Tạo các kết nối DB, cache
Để add database hay cache vào server deepstream thì rất đơn giản ta chỉ cần sử dụng command. Ví dụ
deepstream install cache redis
Kết luận
Deepstream là 1 server rea mới mẻ tuy nhiên nó lại có các tính năng vượt trội như phổ cập ( support nhiều ngôn ngữ khác nhau), có tính mở rộng, và đặc biệt là vẫn giữ performance rất cao