- vừa được xem lúc

Cơ bản về Socketio

0 0 5

Người đăng: Hong Tran Thi

Theo Viblo Asia

Socketio là gì

Để xây dựng một ứng dụng realtime cần sử dụng socketio. Socketio sẽ giúp các bên ở những địa điểm khác nhau kết nối với nhau, truyền dữ liệu ngay lập tức thông qua server trung gian. Socketio có thể được sử dụng trong nhiều ứng dụng như chat, game online, cập nhật kết quả của một trận đấu đang xảy ra,...

Socketio không phải là một ngôn ngữ, mà chỉ là 1 công cụ giúp thực hiện những ứng dụng realtime. Vì thế, không thể sử dụng socketio để thay thế hoàn toàn cho một ngôn ngữ, mà phải sử dụng kết hợp với một ngôn ngữ khác. Ngôn ngữ đó có thể là php, asp.net, nodejs,...

Làm thế nào để sử dụng Socketio

Cấu trúc một ứng dụng realtime sử dụng socket bao gồm 2 phần: phía server, phía client.

  1. Phía server Đây là nơi sẽ cài đặt socket io. Ngôn ngữ để dựng server có thể là php, asp.net, nodejs,... Tuy nhiên, tùy vào ngôn ngữ lựa chọn mà cách cấu trúc server khác nhau. Ở đây, nếu được thì khuyến khích sử dụng nodejs để dựng server, vì như vậy có thể cài trực tiếp socketio vào cùng một server. Nếu sử dụng php thì phải cài thêm những package khác, hoặc phải chuẩn bị riêng server để chạy socketio.

  2. Phía client: Ở phía client sẽ xây dựng giao diện người dùng. Ở đây có thể sử dụng js, hoặc các thư viện của js như jquery,... Nói chung là ngôn ngữ gì cũng được.

  3. Những thứ cần chuẩn bị để sử dụng socketio

  • PC: Mac hoặc Win đều được
  • Download phần mềm socketio
  1. Cài đặt socketio trên server nodejs Tạo thư mục Demo (Có thể đặt tên bất kỳ) Mở màn hình terminal (Mac)/ cmd (Win), cd đến thư mục Demo. Tại màn hình cmd, gõ câu lệnh: npm init; rồi nhấn enter. Khi đó hệ thống sẽ chạy và yêu cầu nhập tên dự án, nhập tên dự án bất kỳ. Ở các setting khác thì enter bỏ qua, khi hệ thống hiển thị Yes or No? thì gõ Yes để cài đặt.

Sau khi hoàn thành bước cài đặt ở trên, hệ thống sẽ tạo ra file package.json. Đây là file dùng để cài đặt cấu hình server. Tiếp theo, cần đặt những package cần thiết trên server để có thể làm web và ứng dụng realtime. Để cài những package này mở màn hình cmd > cd đến thư mục Demo > gõ dòng lệnh npm install express ejs socketio Khi cài đặt thành công, hệ thống sẽ tự tạo thư mục nodemodules

Cơ chế hoạt động của socketio

Khai báo sử dụng socketio

Cơ chế hoạt động của một ứng dụng realtime đó là thông qua server để lắng nghe (listen) data và truyền data về các máy client. Vì vậy cần cài khai báo sử dụng socketio ở cả phía server và client.

Code khai báo sử dụng socketio ở server:

// build server, khai báo sử dụng socket io
var express = require("express");
var app = express();
app.use(express.static("public"));
app.set("view engine", "ejs");
app.set("views", "./views"); var server = require("http").Server(app);
var io = require("socket.io")(server);
server.listen(3000);

Code khai báo sử dụng socketio ở phía client

<html> <head> <title>Demo Socketio - Homepage</title> <script src="jquery.js"></script> <script src="socket.io/socket.io.js"></script> <script> var socket = io("http://localhost:3000"); </script> </head> <body> </body> </html>

Cơ chế lắng nghe, truyền dữ liệu của socketio

Để lắng nghe data, ta sử dụng câu lệnh socket.on(), để phát dữ liệu thì sử dụng lệnh socket.emit() .

Ví dụ, client gửi 1 đoạn chat đi, thì khi đó ở phía server cần viết code để nhận dữ liệu đoạn code đó và truyền dữ liệu chat đó đi đến các server khác. Đồng thời ở ở phía client cũng cần viết code để gửi và nhận dữ liệu từ server.

Code phía server

// build server
var express = require("express");
var app = express();
app.use(express.static("public"));
app.set("view engine", "ejs");
app.set("views", "./views"); var server = require("http").Server(app);
var io = require("socket.io")(server);
server.listen(3000); // tạo kết nối giữa client và server
io.on("connection", function(socket) { socket.on("disconnect", function() { }); //server lắng nghe dữ liệu từ client socket.on("Client-sent-data", function(data) { //sau khi lắng nghe dữ liệu, server phát lại dữ liệu này đến các client khác socket.emit("Server-sent-data", data); }); }); // create route, display view app.get("/", function(req, res) { res.render("homepage"); });

Code phía client

<html> <head> <title>Demo Socketio - Homepage</title> <script src="jquery.js"></script> <script src="socket.io/socket.io.js"></script> <script> var socket = io("http://localhost:3000"); //client nhận dữ liệu từ server socket.on("Server-sent-data", function(data) { $("#chat-content").append(data); }); //client gửi dữ liệu lên server $(document).ready(function() { $("#send").click(function() { socket.emit("Client-sent-data", "Hello world"); }); }); </script> </head> <body> <h1>Demo Socketio</h1> <div> <button id="send">Send</button> </div> </body> </html>

Lưu ý: socket.on và socket.emit có parameter thứ 1 là tên đường truyền. Tên đường truyền có thể là tên bất ký, tuy nhiên đễ truyền và nhận dữ liệu của chung 1 đường truyền thì tên đường truyền phải giống nhau.

Ví du: client gửi data bằng đường truyền có tên là Client-Sent-data, thì để nhận được data của đường truyền này thì server của phải khai báo tên đường truyền là Client-Sent-data trong lệnh socket.on.

Client send

$(document).ready(function()
{ $("#send").click(function() { socket.emit("Client-sent-data", "Hello world"); });

Server listen

socket.on("Client-sent-data", function(data)
{
});

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 738

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 358

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 449

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 433