Hướng dẫn reactphp examples - ví dụ reactphp
Chả là trong cái thời gian dịch bài về PSR-7, mình có đọc qua về 1 thư viện không theo SAPI tên là ReactPHP. Và thế là tháng vừa rồi mình quyết định bỏ ra tí thời gian để xem qua rốt cục thư viện này có cái gì hay. Kết quả thu được của mình là hối hận vì đã học Lập trình mạng quá sớm (cry an ocean). Show Định nghĩa chungTheo định nghĩa ở trên doc thì nó là:
Tức là sử dụng nó thì bạn cần kèm với các thư viện/framework khác để nó có thể là sản phẩm hoàn chỉnh chạy bằng browser mà chúng ta đã quen với việc dùng để chạy sản phẩm. Và nó thực sự tốt cho những ai đang học lập trình mạng hoặc mạng máy tính cần hiểu về các port cũng như giao thức TCP/IP,... Và nó cũng mang tính linh hoạt của PHP, giúp cho bạn có thể nhanh chóng hoàn thành 1 project lập trình liên quan tới port và socket chỉ trong 2 giờ!(ôi ký ức ác mộng đời mình. Chật vật trắng cả đêm với C cho môn Network Programming trong tình trạng bị 2 tên khóa trên bỏ học giữa chừng và phải đi báo cáo 1 mình(khoc) May mà qua môn. Qua đó thì mình thực sự ghét những thằng khốn nào bỏ mặc đồng đội đối phó với khó khăn 1 mình) Cài đặt và sử dụngSorry các bạn vì mấy dòng xàm le yếu lòng bên trên. Ok, chúng ta sẽ bước vào phần cài đặt. Thực chất thì ReactPHP gồm nhiều component khác nhau, thế nên cái gọi là cài "framework" ReactPHP thực chất là bạn pick những component cần thiết. Và vì là thư viện PHP nên cách bạn cài nó đơn giản nhất là thông qua Composer: Và đây là kết quả câu lệnh trên: Một số khái niệm cơ bảnEvent Loop và Timer
Để gọi tới event loop, ta sẽ code như sau:
Sau đó ta sẽ gọi hàm
Như vậy là chương trình sẽ chạy. Trong Vậy khái niệm timer là gì?
Để cài đặt timer cho ứng dụng, ta sử dụng phương thức
Câu lệnh trên được thực thi sẽ cho kết quả 1 giây sẽ in ra 1 dòng 0 trên server và nó sẽ in mãi cho tới đk nhất định(nếu bạn định nghĩa đk ấy) hoặc ngắt bằng Javascript.Và cảm tưởng đầu tiên là nó hao hao cái lệnh được dùng và tùy chỉnh khi viết C++ ở mạch Arduino.(với 1 giống với 2 và 3 như 4 của Arduino C++ vậy)StreamsTiếp tới là khái niệm các luồng dữ liệu. Theo như giải thích đơn giản từ các nguồn tutorial cho thư viện này trên mạng thì gói stream của ReactPHP sẽ có những interface xử lý cho non-block I/O bất đối xứng. Và rất hữu hiệu khi bạn làm 1 ứng dụng phim có khả năng download mà không gây tổn hại bộ nhớ hệ thống của bạn. PromisesCái này thì giống hệt như Javascript vậy. Tuy nhiên nhảy ra 2 khái niệm nhỏ. DefferedDeffered đại diện cho một tính toán hoặc đơn vị công việc có thể chưa hoàn thành. Thông thường (nhưng không phải luôn luôn), tính toán đó sẽ là một cái gì đó thực hiện không đồng bộ và hoàn thành tại một số điểm trong tương lai. PromiseTrong khi một Deffered đại diện cho tính toán chính nó, một Promise đại diện cho kết quả của tính toán đó. Do đó, mỗi Deffered có một Promise đóng vai trò như một placeholder cho kết quả thực tế của nó.
Demo với ứng dụng chatMình chỉ demo nhanh tới ví dụ đầu theo như video list bên dưới. Còn lại tới demo vụ download thì thôi nhé. Các bạn tự mày mò tiếp. Mình lúc đầu vừa code vừa bắn CoD:MW2 nên lúc chạy ớ người là Windows chặn stream data. Thế là phải bật tạm C9 lên demo vì lý do máy chạy Linux cũng đang đi nghỉ mát ở cửa hàng sửa chữa. Tạm lại thì đây là 3 cái source code chính. server
client
ConnectionPool
Video demoOK. Quay hơi fail nên mong các bạn thông cảm. Và vì vừa trải qua 1 cảm xúc đau buồn của game nên mình demo bằng đoạn này Cảm nhận cá nhânMình chỉ mất tầm 1 tiếng để có thể code được cái app chat trên. Qủa thật nó đơn giản và nhanh kinh lên được. Tới độ mà giờ mình muốn gỡ điểm B môn Network Programming năm xưa lên điểm A(giải thích thêm: Hồi bị bỏ 1 mình ấy mình đã phải vật lộn 1 đống big cho cái sp lởm khởm bằng C. May mà demo được. Cơ mà lại thành đổi đề tài không được phân công như ban đầu nên mình B. Ngoài 2 thằng cha tự bỏ học bắt mình báo cáo 1 mình thì cả lớp đều A. Thế nên dù qua môn nhưng mình vẫn tiếc rẻ là giá như hồi đó biết cái này sớm hơn thì đã nâng được CPA rồi). Cảm ơn các bạn đã theo dõi bài viết Tham khảo
|