Sử dụng WebSockets với Node.js

WebSockets là một giải pháp thay thế cho giao tiếp HTTP trong Ứng dụng Web. Họ cung cấp một kênh giao tiếp hai chiều, tồn tại lâu dài giữa máy khách và máy chủ.

WebSockets là một giải pháp thay thế cho giao tiếp HTTP trong Ứng dụng Web.

Họ cung cấp một kênh giao tiếp hai chiều, tồn tại lâu dài giữa máy khách và máy chủ.

Sau khi được thiết lập, kênh được giữ ở trạng thái mở, cung cấp kết nối rất nhanh với độ trễ và chi phí thấp.

Hỗ trợ trình duyệt cho WebSockets

WebSockets được hỗ trợ bởi tất cả các trình duyệt hiện đại.

Browser support for WebSockets

WebSockets khác với HTTP như thế nào

HTTP là một giao thức rất khác và cũng là một cách giao tiếp khác.

HTTP là một giao thức yêu cầu / phản hồi: máy chủ trả về một số dữ liệu khi máy khách yêu cầu.

Với WebSockets:

  • cácmáy chủ có thể gửi tin nhắn đến máy kháchmà không có khách hàng yêu cầu một cách rõ ràng một cái gì đó
  • máy khách và máy chủ có thểnói chuyện với nhau đồng thời
  • chi phí rất ít dữ liệucần được trao đổi để gửi tin nhắn. Điều này có nghĩa là mộtgiao tiếp độ trễ thấp.

WebSocketsrất tốt chothời gian thựcsống lâuthông tin liên lạc.

HTTPlà tuyệt vời chotrao đổi dữ liệu không thường xuyênvà các tương tác do khách hàng khởi xướng.

HTTP đơn giản hơn nhiềuđể triển khai, trong khi WebSockets yêu cầu chi phí cao hơn một chút.

WebSockets bảo mật

Luôn sử dụng giao thức bảo mật, được mã hóa cho WebSockets,wss://.

ws://đề cập đến phiên bản WebSockets không an toàn (http://của WebSockets), và nên tránh vì những lý do rõ ràng.

Tạo kết nối WebSockets mới

const url = 'wss://myserver.com/something'
const connection = new WebSocket(url)

connectionlà mộtWebSocketvật.

Khi kết nối được thiết lập thành công,opensự kiện bị sa thải.

Hãy lắng nghe nó bằng cách gán một chức năng gọi lại choonopentài sản củaconnectionvật:

connection.onopen = () => {
  //...
}

Nếu có bất kỳ lỗi nào,onerrorhàm gọi lại được kích hoạt:

connection.onerror = error => {
  console.log(`WebSocket error: ${error}`)
}

Gửi dữ liệu đến máy chủ bằng WebSockets

Sau khi kết nối được mở, bạn có thể gửi dữ liệu đến máy chủ.

Bạn có thể làm như vậy một cách thuận tiện bên trongonopenchức năng gọi lại:

connection.onopen = () => {
  connection.send('hey')
}

Nhận dữ liệu từ máy chủ bằng cách sử dụng WebSockets

Nghe khi bật chức năng gọi lạionmessage, được gọi khimessagesự kiện được nhận:

connection.onmessage = e => {
  console.log(e.data)
}

Triển khai máy chủ WebSockets trong Node.js

wslà một thư viện WebSockets phổ biến choNode.js.

Chúng tôi sẽ sử dụng nó để xây dựng một máy chủ WebSockets. Nó cũng có thể được sử dụng để triển khai một máy khách và sử dụng WebSockets để giao tiếp giữa hai dịch vụ phụ trợ.

Dễ dàng cài đặt nó bằng cách sử dụng

yarn init
yarn add ws

Mã bạn cần viết là rất ít:

const WebSocket = require('ws')

const wss = new WebSocket.Server({ port: 8080 })

wss.on(‘connection’, ws => { ws.on(‘message’, message => { console.log(Received message =&gt; </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">message</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) }) ws.send(‘ho!’) })

Mã này tạo một máy chủ mới trên cổng 8080 (cổng mặc định cho WebSockets) và thêm chức năng gọi lại khi kết nối được thiết lập, gửiho!cho máy khách và ghi nhật ký các thông báo mà nó nhận được.

Xem ví dụ trực tiếp trên Glitch

Đây là một ví dụ trực tiếp về máy chủ WebSockets:https://glitch.com/edit/#!/flavio-websockets-server-example

Đây là một ứng dụng khách WebSockets tương tác với máy chủ:https://glitch.com/edit/#!/flavio-websockets-client-example

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: