SOCKET.IO

Socket.IO – Xử lý sự kiện

Written by huudoanh

Socket hoạt động dựa trên các sự kiện. Có một số sự kiện dành riêng, có thể truy cập bằng cách sử dụng socket object ở phía máy chủ:

  • Connect
  • Message
  • Disconnect
  • Reconnect
  • Ping
  • Join and
  • Leave

Phía client:

  • Connect
  • Connect_error
  • Connect_timeout
  • Reconnect, etc

Trong bài Hello World, chúng ta đã sử dụng các sự kiện connection và disconnection để log khi người dùng kết nối và rời đi. Bây giờ chúng ta sẽ sử dụng sự kiện Message để truyền tin nhắn từ máy chủ đến máy khách. Để thực hiện việc này, hãy sửa đổi lệnh gọi io.on(‘connection’, function(socket)) như sau:

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');
});

io.on('connection', function(socket) {
   console.log('A user connected');

   //Send a message after a timeout of 4seconds
   setTimeout(function() {
      socket.send('Sent a message 4seconds after connection!');
   }, 4000);

   socket.on('disconnect', function () {
      console.log('A user disconnected');
   });
});

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

Bây giờ, chúng ta cần xử lý sự kiện này ở phía client. Vì vậy, hãy sửa lại script tag trong file index.html của bạn như sau:

<script>
   var socket = io();
   socket.on('message', function(data){document.write(data)});
</script>

Message là một sự có sẵn cung cấp bởi API, nhưng không được sử dụng nhiều trong một ứng dụng thực tế, vì chúng ta cần có khả năng phân biệt giữa các sự kiện.

Để làm được điều này, Socket.IO cung cấp cho chúng ta khả năng tạo các sự kiện tùy chỉnh. Bạn có thể tạo và kích hoạt các sự kiện tùy chỉnh bằng cách sử dụng chức năng socket.emit.

Emitting events

Ý tưởng chính đằng sau Socket.IO là bạn có thể gửi và nhận bất kỳ sự kiện nào bạn muốn, với bất kỳ dữ liệu nào. Các object có thể được viết dưới dạng JSON và dữ liệu nhị phân – binary data.

Hãy tạo ra một sự kiện để khi người dùng gõ tin nhắn, máy chủ sẽ nhận nó dưới dạng sự kiện tin nhắn trò chuyện. Phần code javascript trong index.html bây giờ sẽ trông như sau:

<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  $(function () {
    var socket = io();
    $('form').submit(function(e){
      e.preventDefault(); // prevents page reloading
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
  });
</script>

Và trong file  app.js chúng ta sẽ in ra sự kiện chat message:

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
  });
});

Mở trình duyệt và gõ vào nội dung Send message sucessful trong ô chat, nhấn send, trong terminal sẽ hiển thị:

[nodemon] starting `node app.js`
listening on *:3000
message: Send message sucessful