PHP TUTORIALS
Hướng dẫn tạo domain ảo tại localhost với XAMPP trên Window Có gì mới trong PHP 8 (Tính năng, Cải tiến và Trình biên dịch JIT) Hướng dẫn viết ứng dụng kiểm tra năm sinh theo âm lịch bằng PHP Xử lý realtime trong PHP sử dụng pusher Hướng dẫn gửi mail trong PHP với PHPMailer Bóc tách dữ liệu từ trang khác bằng PHP Simple HTML DOM Parser Cách sửa lỗi hình ảnh khi đăng bài viết lên Facebook Hướng dẫn tạo thông báo realtime với pushcrew Kích thước chuẩn và cách làm FavIcon icon Tìm hiểu bản chất vòng lặp foreach trong php Những vấn đề nâng cao kỹ năng lập trình trong php Sử Dụng Vòng Lặp Xuất Dữ Liệu Bảng Tính Lương Tìm hiểu thuật toán phân trang trong php Giới hạn số trang trong thuật toán phân trang Bài 01: Đệ quy menu đa cấp với php và mysql - phần 1 Bài 02: Đệ quy menu đa cấp với php và mysql - phần 2 Tích hợp bộ search google vào website Nên dùng count() hay sizeof() để đếm số phần tử của mảng Bài 01: Lấy dữ liệu từ mysql lưu vào file excel với PHPExcel Tạo slug tự động bằng JavaScript và PHP RSS là gì? Cách Tạo RSS cho Website PHP CMS là gì? Các CMS phổ biến hiện nay (update 2021) Web động là gì? Web tĩnh là gì? Chặn referrer từ website simple-share-buttons.com Bảng mã ASCII chuẩn các hệ nhị phân - thập phân - thập lục phân Hướng dẫn tạo Facebook App để lấy App ID và Secret Key Mối liên hệ giữa HTML - PHP - MYSQL Tự động post bài viết lên tường với hootsuite.com Kiểm tra người dùng đã đăng nhập hay chưa bằng PHP Lấy video kênh Youtube mới nhất bằng jQuery và Youtube API V3 Đệ quy chuyên mục đa cấp trong PHP toàn tập Font Awesome là gì? Cách sử dụng Font Awesome Tích hợp đăng nhập Google vào Website Thuật toán phân trang với PHP và MySQL Cài đặt LAMP trên Fedora
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Xử lý realtime trong PHP bằng cách sử dụng pusher

Mình đang trong giai đoạn làm ứng dụng quản lý bán hàng cho bên mình và trong đó có một số chức năng cần realtime. Lúc đầu mình dùng ajax và request dữ liệu liên tục nhìn rất xót cho sever do em ấy phải lao lực mặc dù bố em ấy không hút nhiều thuốc (chém tí). Và cách đây vài hôm thật tình cờ và đầy bất ngờ mình đã gặp và làm quen với cô bạn pusher này và mình đã quyết định chung sống với em nó trong dự án của mình. Kiểu như vợ nhặt ấy :D. Luyên thuyên thế đủ rồi nói tóm lại trong nội dung bài ngày hôm nay mình muốn giới thiệu đến các bạn cách tạo ứng dụng realtime với pusher.

1. Ứng dụng realtime là gì?

Ứng dụng realtime là ứng dụng tương tác với người dùng theo thời gian thực. Ví dụ như ứng dụng chát, ứng dụng thông báo dạng như facebook....Và một trong những ngôn ngữ hỗ trợ rất tốt trong việc này đó là NodeJs bạn có thể tìm hiểu trên freetuts và một số nguồn khác.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Thế còn với php thì sao?

Đối với php bạn có thể xây dựng ứng dụng realtime bằng một vài cách sau

Sử dụng ajax request dữ liệu liên tục sau môi giây.

Ưu diểm: Nhanh gọn, dễ dùng.

Nhược điểm: Do phải request dữ liệu liên tục như thế sẽ rất tốn tài nguyên sever nhìn sẽ rất xót xa.

Sử dụng WebSockets với ratchet cái này mình không rành nên không dám chém bừa sợ gạch đá lắm nếu bạn có hứng thú cỏ thể tìm hiểu tại http://socketo.me/.

Và còn một số kỹ thuật khác nhưng trong khổ bài viết này mình sẽ giới thiệu đến các bạn bằng cách sử dụng qua sever trung gian đó là sử dụng pusher.

Bạn sẽ sử dụng ứng dụng realtime vào hệ thống của mình như thế nào?

Bạn có một website bán hàng? Bạn muốn thông báo về tình trạng đơn hàng cho khách hàng, hay xây dựng chương trình nhắn tin từ quản trị đến thành viên như thông báo khuyến mãi, biến động số dư....Hoặc bạn đang ấp ủ một website lấy kết quả xổ số,kết quả bóng đá theo thời gian thực, hoặc ứng dụng rất phổ biến là chát giữa các thanh viên với nhau. Thì lúc này bạn sẽ nghĩ đến realtime.

2. Pusher là gì?

Pusher là 1 dịch vụ cung cấp cho người dùng 1 Server ảo làm trung gian xử lý các dữ liệu với thời gian thực.Cho đến thời điểm hiện tại pusher đã có hơn 100 nghìn người sử dụng. Mình vừa mới thử qua pusher và thấy nó khá nhanh và dễ sử dụng.

Vậy pusher hoạt động như thế nào?

Quy trình hoạt động của pusher được thể hiện qua sơ đồ sau

Quy trình hoạt độn của pusher trong xử lý realtime
Nguồn: internet

Client duyệt web - > dữ liệu sẽ được chuyến đến sever-> sever chuyển tiếp đến Pusher thông qua pusher API -> Pusher trả kết lại cho client (hoặc client khác).

Pusher cung cấp cho chúng ta nhiều gói dịch vụ bạn có thể tham khảo tại đây. Nhưng gói free của pusher cung đã cũng cấp cho chúng ta 200k tin nhắn và 100 kết nối mỗi ngày. Và theo mình chừng ấy cũng là quá đủ cho một website tầm trung.

Ưu điểm của pusher: Bạn chỉ mất khoảng 5 phút để có thể tạo ra 1 ứng dụng realtime sử dụng pusher mà không cần biết quá nhiều kiến thức.

Nhược điểm: Sử dụng qua sever trung gian lên tương tác sẽ chậm hơn 1 chút nhưng không đáng kể.

Đối với những hệ thống lớn lượng request trong ngày cao bạn cần phải nâng cấp. Nhưng theo mình đối với những website lớn thì bạn nên tìm hiểu các công nghệ khác laugh

3. Hướng dẫn sử dụng pusher.com với realtime trong php.

Và tất nhiên để sử dụng bạn cần phải đăng ký 1 tài khoản bạn có thể đăng ký tại đây

bạn chỉ cần 30s để tạo nó qua nhanh quá nguy hiểm chút nào phải không nào.Hãy tin mình đi bạn cứ mạnh dạng mà đăng ký đi nó sẽ không lạm bạn phí 30s cuộc đời đâu. Sau khi đăng ký xong nó sẽ yêu cầu bạn đặt tên cho app của mình bạn đặt là gì thì đặt.

Sau đó bạn chọn tab app key. Bạn sẽ thấy những thông số như bên dưới bạn sẽ dùng nó ngay sau đây nhé.

xử lý realtime trong php

Ok. Công việc cài đặt đên đây là xong bây giờ chúng ta sẽ chén nó thôi nào.

Sau đây mình sẽ hướng dẫn các bạn ứng dụng nó kết hợp với bài viết ứng dụng thông báo lên trình duyệt giống facebook để tạo ra 1 ứng dụng thông báo realtime.

Đầu tiên bạn tạo 1 file notice.js có nội dung như sau, nội dung của file này để hỏi người dùng có đồng ý nhận thông báo không trong lần truy cập đầu tiên. Bạn có thể tham khảo bài viết mình đã đưa link ở trên để hiểu rõ hơn.

document.addEventListener('DOMContentLoaded', function () {
    if (!Notification) {
        alert('Trình duyệt của bạn không hỗ trợ chức năng này.'); 
        return;
    }
    if (Notification.permission !== "granted")
        Notification.requestPermission();
});

Sau đó bạn sẽ gọi file đấy vào index.html. Nội dung file index.html chỉ đơn giản như này.

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Realtime trong php</title>
        <script src="notice.js"></script>
    </head>
    <body>
        <p style="color:#ff0000;line-height:20px">
            Bạn đang tìm hiểu demo realtime trong php bằng cách sử dụng pusher, bạn cần đồng ý cho phép thông báo trên trang web này để có thể test demo trong bài này. Bạn đừng đi đâu cả hay mở tab mới chạy file send.php để xem kết quả nhé
        </p>
    </body>
</html> 

Tiếp theo bạn sẽ tạo file send.php như sau.

<?php

require('Pusher.php');
$options = array(
    'encrypted' => true
);
$pusher = new Pusher(
        '10d5ea7e7b632db09c72', 'a496a6f084ba9c65fffb', '234217', $options
);
$data['name'] = 'Freetuts.net';
$data['message'] = 'Đây là tin nhắn test realtime với pusher';
$pusher->trigger('Freetuts', 'notice', $data);
//Freetuts la ten kenh ban dat la gi thuy
//notice la su kien ban dat gi cung duoc ban co the tao ra nhieu kenh
//data la du lieu gui di
?>

Trong file trên mình có require file Pusher.php bạn có thể down nó tại đây

Bây giờ bạn quay lại file index.html và viết thêm một đoạn javascript có nội dung như sau, nội dung của đoạn này là khi có dữ liệu mới thì sẽ thực thi câu lệnh thông báo tới người dùng.

<script type="text/javascript">
    Pusher.logToConsole = true;
    var pusher = new Pusher('10d5ea7e7b632db09c72', {
        encrypted: true
    });
    var channel = pusher.subscribe('Freetuts');
    // chanel trùng voi chanel trong send.php
    channel.bind('notice', function (data) {
        //code xử lý khi có dữ liệu từ pusher
        n = new Notification(
                'Bạn nhận được thông báo mới',
                {
                    body: data.name + 'đã gửi tin nhắn cho bạn:' + data.message,
                    icon: 'https://freetuts.net/public/logo/icon.png', // Hình ảnh
                    tag: 'https://freetuts.net/' // Đường dẫn 
                });
        setTimeout(n.close.bind(n), 10000);
        // tự động đóng thông báo sau 10s
        n.onclick = function () {
            window.location.href = this.tag;
        }
        // kết thúc code xử lý thông báo
    });
</script>

Và để pusher hoạt động bạn cần nhúng thêm file js của pusher, và lúc này đoạn code hoàn chỉnh của chúng ta như sau

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Tiêu đề website</title>
        <script src="notice.js"></script>
        <script src="https://js.pusher.com/3.2/pusher.min.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            Pusher.logToConsole = true;
            var pusher = new Pusher('10d5ea7e7b632db09c72', {
                encrypted: true
            });
            var channel = pusher.subscribe('Freetuts');
            channel.bind('notice', function (data) {
                n = new Notification(
                        'Bạn nhận được thông báo mới',
                        {
                            body: data.name + 'đã gửi tin nhắn cho bạn:' + data.message,
                            icon: 'https://freetuts.net/public/logo/icon.png',
                            tag: 'https://freetuts.net/'
                        }
                );
                setTimeout(n.close.bind(n), 10000);
                n.onclick = function () {
                    window.location.href = this.tag;
                }
            });
        </script>
        <p style="color:#ff0000;line-height:20px">
            Bạn đang tìm hiểu demo realtime trong php bằng cách sử dụng pusher, bạn cần đồng ý cho phép thông báo trên trang web này để có thể test demo trong bài này. Bạn đừng đi đâu cả hay mở tab mới chạy file send.php để xem kết quả nhé
        </p>
    </body>
</html>

Như vậy là mình đã giới thiệu xong về cách xử lý realtime trong php với pusher. Bạn có thể kiểm tra nó như sau. Đầu tiên bạn chạy file index.html lên sau đó cấp phép cho nó nhận thông báo. Bạn đứng đóng trang đó lại mà cần để đó thì mới có thể nhận được thông báo. Còn nếu bạn muốn đóng trình duyệt mà vẫn nhận được thông báo thì hãy tìm hiểu https://pushcrew.com/. OK bây giờ bạn mở sửa sổ mới chạy file send.php bạn kiếm tra xem có nhận được thông báo không nhé.

4. Kết luận

Trên mình vừa giới thiệu đến các bạn về cách viết một ứng dụng realtime đơn giản trong php bằng cách sử dụng pusher. Bài viết chỉ ở mức sơ khai nhưng hy vọng qua đó bạn có thể áp dụng vào các dự án thực tiễn của mình một cách tốt nhất.

Đây là bài viết đầu tiên của mình. Mình cũng mới tìm hiểu về cô bạn pusher này cũng như kinh nghiệm và khả năng lập trình của mình còn yếu nên trong bài viết sẽ có nhiều thiếu xót rất mong được sự góp ý của các bạn để mình rèn luyện tốt hơn. Các bạn có ý tặng gạch đá cho mình xây nhà thì cũng ném nhẹ tay thui nhé.

Bạn có thắc mắc gì hãy bình luận ở dưới hoặc đặt trong group để chúng ta cũng thảo luận và tìm hướng giải quyết nhé.

Chúc các bạn thành công!

Bài viết được đóng góp bởi bạn ChiPheo.

Tổng hợp dữ liệu trong bài:

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top