0

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ã 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.

Image

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 Image

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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí