SOCKET.IO

Socket.IO – Namespaces

Written by huudoanh

Socket.IO cho phép “namespace” socket của bạn. Điều này có nghĩa là chỉ định các endpoint hoặc đường dẫn khác nhau.

Đây là một tính năng hữu ích để giảm thiểu số lượng tài nguyên (kết nối TCP) và đồng thời tách biệt các kênh giao tiếp trong ứng dụng của bạn.

Namespace được tạo ở phía máy chủ. Tuy nhiên, chúng được client tham gia bằng cách gửi yêu cầu đến máy chủ.

Namespace mặc định

Namespace gốc ‘/’ là namespace mặc định, nơi client sẽ kết nối vào nếu không có namespace nào được chỉ định khi client kết nối đến server. Tất cả các kết nối đến server sử dụng socket-object ở phía client tạo thành namespace mặc định.

var socket = io();

Tuỳ biến namespace

Chúng ta có thể tạo ra một namespace bằng cách gọi hàm ‘of’ ở phía server:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendFile(__dirname + '/index.html');
});

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket) {
   console.log('someone connected');
   nsp.emit('hi', 'Hello everyone!');
});

http.listen(3000, function() {
   console.log('listening on *:3000');
});

Bây giờ, để kết nối client với namespace này, bạn cần cung cấp namespace làm đối số cho io constructor call để tạo kết nối và socket object ở phía máy client.

<!DOCTYPE html>
<html>
   <head>
      <title>Hello world</title>
   </head>
   <script src = "/socket.io/socket.io.js"></script>
   
   <script>
      var socket = io('/my-namespace');
      socket.on('hi',function(data) {
         document.body.innerHTML = '';
         document.write(data);
      });
   </script>
   <body></body>
</html>

Mỗi khi ai đó kết nối với namespace này, họ sẽ nhận được một sự kiện ‘hi‘.