Socket.io là gì? Giới thiệu về Socket.i - Socket.i
Bạn đã biết socket.io là gì chưa? Trong một trang web việc giao tiếp từ máy chủ đến máy khách là điều bắt buộc, trong trường hợp bạn cần máy khách(client) hay máy chủ(server) có thể nhận sự thay đổi bên kia thì bạn có thể giải quyết bằng cách sử dụng : AJAX, long-polling, short-polling, & HTML 5 ...
Bạn đã biết socket.io là gì chưa? Trong một trang web việc giao tiếp từ máy chủ đến máy khách là điều bắt buộc, trong trường hợp bạn cần máy khách(client) hay máy chủ(server) có thể nhận sự thay đổi bên kia thì bạn có thể giải quyết bằng cách sử dụng : AJAX, long-polling, short-polling, & HTML 5 server-sent events,..
Nhưng khi sử dụng những cách thức trên thì kết quả về chậm và tốn rất nhiều tài nguyên và không khả thi cho các ứng dụng lớn. Bởi vậy, Socket.io ra đời cho phép bạn xây dựng để xử lý việc giao tiếp giữa server và client ngay lập tức và chiếm ít tài nguyên nhất.
1. Socket.io là gì ?
Socket.io là một module trong Node.js được phát triển vào năm 2010. Nó được phát triển để sử dụng các kết nối mở để tạo điều kiện giao tiếp thời gian thực, trả về giá trị thực ở tại thời điểm đó. Socket.io cho phép giao tiếp hai chiều giữa máy khách và máy chủ. Giao tiếp hai chiều được bật khi máy khách có Socket.io trong trình duyệt và máy chủ cũng đã tích hợp gói Socket.io
Nó được sử dụng trong việc xây dựng các ứng dụng web real-time cần tốc độ phản hồi ngay lập tức như: chat, trực tiếp bóng đá,.... Socket.io xây dựng dựa trên Engine.IO, đầu tiên nó sẽ thiết lập một kết nối long-polling, sau đó cố gắng nâng cấp lên các kết nối khác tốt hơn giống như WebSocket.
Ngoài Socket.io chúng ta còn có một vài kết nối khác như:
Trong long-polling, client sẽ gửi yêu cầu giống AJAX đến máy chủ. Với mỗi lần nhận được yêu cầu, máy chủ sẽ gửi phản hồi lại nếu & khi có cập nhật mới. Tại đây, clients sẽ liên tục & định kỳ yêu cầu cập nhật từ máy chủ, thông qua các kết nối TCP riêng biệt, làm tắc nghẽn lưu lượng mạng.
Trong short-polling, clients định kỳ gửi yêu cầu đến máy chủ để hỏi xem có gì mới không. Máy chủ không đợi, nhưng gửi lại nếu có cập nhật hoặc chỉ có tin nhắn trống. Ở đây, mạng thậm chí còn tắc nghẽn hơn với các yêu cầu liên tục này, ngay cả khi không có bản cập nhật.
Trong WebSockets, sẽ luôn có một kết nối TCP giữa clients và server. Có luồng dữ liệu hai chiều giữa clients và server cũng như tính chất thời gian thực do luôn kết nối TCP mở. Trong các phương thức, có tiềm năng rất lớn để tăng tốc độ trong WebSockets. Dung lượng phần header của giao thức HTTP là 100 byte, trong khi phần header của socket chỉ là 2 byte. Vì vậy, sau khi sử dụng HTTP ban đầu, Sockets có thể giao tiếp với tài nguyên ít hơn nhiều. Với nhiều số lượng yêu cầu được gửi đến thì nó cũng sẻ làm tăng thời gian phản hồi từ server tới clients.
Socket.io KHÔNG phải là phát triển dựa trên WebSocket. Mặc dù Socket.io thực sự sử dụng WebSocket như một cách để giao tiếp trong một vài trường hợp, Socket.io sẽ bổ sung một số siêu dữ liệu cho mỗi gói: loại gói, không gian tên và id gói khi cần xác nhận thông báo. Đó là lý do tại sao máy khách WebSocket sẽ không thể kết nối thành công với máy chủ Socket.io và máy khách Socket.io cũng sẽ không thể kết nối với máy chủ WebSocket.
2. Socket.io có những gì nổi bật ?
Socket.io được cộng đồng lâp trình viên sử dụng rất nhiều, bởi tốc độ cũng như sự tiện lợi của nó. Socket.io cung cấp cho chúng ta nhiều phương thức cũng như các tính năng nổi bật như: bảo mật, birnary, tự động kết nối, phát hiện ngắt kết nối, ghép kênh, tạo phòng,..
Tính bảo mật
Khi Socket.io xuất hiện, nó sẽ tự động tạo những kết nối bảo mật như:
- Proxy và cân bằng tải.
- Tường lửa cá nhân và phần mềm chống vi-rút.
Như mình đã đề cập ở trên, Socket.io xây dựng dựa vào Engine.IO, trước tiên nó sẽ khởi chạy phương thức long-polling để kết nối, sau đó sử dụng các phương thức giao tiếp khác tốt hơn giống như Websocket.
Tự động kết nối lại, phát hiện ngắt kết nối
Mặc định, trong quá trình chạy, khi client nếu bị ngắt kết nối, nó sẽ tự động gắng kết nối lại mãi mãi cho tới khi server có phản hổi lại, tính năng này có thể được tùy chỉnh nếu muốn. Ngoài ra, Socket.io còn cung cấp cho chúng ta các events để phát hiện ngắt kết nối giữa client và server, hoặc ngược lại.
Hỗ trợ nhị phân
Socket.io hỗ trợ chúng ta các kiểu mã hóa nhị phân như :
- ArrayBuffer và Blob trên trình duyệt
- ArrayBuffer và Buffer trong Node.js
Hỗ trợ tạo kệnh và phòng
Socket.io cũng cho phép tạo ra các kênh riêng biệt, từ đó tạo ra mối quan hệ riêng giữa các phần như mỗi module riêng lẻ hoặc dựa trên các quyền khác nhau. Ngoài ra, còn cho phép bạn tạo ra các phòng khác nhau, những clients có thể được tham gia vào phòng khác nhau. Đây là một tính năng hữu ích để gửi thông báo cho một nhóm người dùng hoặc cho một người dùng nhất định được kết nối trên một số thiết bị chẳng hạn. Với những API đơn giản và thuận tiện giống như:
io.on('connection', function(socket){ socket.emit('request', /* */); // emit an event to the socket io.emit('broadcast', /* */); // emit an event to all connected sockets socket.on('reply', function(){ /* */ }); // listen to the event });
3. Cài đặt Socket.io
Để cài đặt Socket.io trong dự án của mình ban cần phải cài đặt ở 2 phía đó là server và client. Socket.io sẽ đảm nhận kết nối giữa 2 phía, thông thường các API của 2 phia sẽ tương tự giống nhau.
Socket.io trên server
Đối với server Node.js bạn chỉ cần dùng npm đê cài đặt package có tên socket.io
, bạn truy cập vào thư mục dự án và mở terminal :
npm install --save socket.io
Socket.io trên client
Một bản dựng độc lập của clients được hiển thị theo mặc định bởi server tại /socket.io/socket.io.js
Ngoài ra, bạn có thể cài đặt import thư viện này ở cdn , hoặc cài đặt thành các gói như webpack hoặc browserify bằng cách dùng npm:
npm install --save socket.io-client
Trên đây là những phần giới thiệu cơ bản về Socket.io. Mong bài viết này có thể giúp ích cho bạn trong quá trình tìm hiểu về module Socket.io, mong các ban ủng hộ các bài viết tiếp theo trong seri này nhé !