Thursday, May 21, 2015

Event-driven programing và IO non-blocking


1. Event driven

Event driven programming là mô hình lập trình dựa trên các sự kiện từ đầu vào, hoặc các thông điệp (message) từ các ứng dụng khác.
Bạn code sẵn các event có thể xảy ra khi người dùng tương tác.
Thay vì người dùng phải chờ chương trình, thì ngược lại là chương trình lại đang chờ tương tác của người dùng - là lập tức phản ứng ngay =)).
Đây là mô hình lập trình khá phổ biến. Giả sử trên ứng dụng của bạn sẽ có các thao tác như Update, Xóa, Tạo mới. Trong phần code, bạn viết sẵn code function cho thao tác đó, mỗi khi người dùng bấm nút Xóa, lập tức yêu cầu được gửi lên server, và server sẽ gọi đến function Xóa và thực hiện các bước trong hàm đó, rồi trả về kết quả.
http.createServer(function (req, res){
    var parsedUrl = url.parse(req.url, true); // true to get query as object
 var queryAsObject = parsedUrl.query;
 var action = queryAsObject['action'];
 var id = parseInt(queryAsObject['id']);
 switch(action){
  case "delete":
   DeletePost(id);
   break;
  case "update":
   ...
   break;
  case "add":
   ...
   break;
  default:
   break;
 }
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Bạn đã xóa post với id = ' + id);
}).listen(8080);
console.log('Server running at port 8080');

function DeletePost(postId) {
 try{
  database.excute("delete tbl_Post where Id =" + postId);
 }catch(Exception e){
  throw e.Message;
 }
}
Ở đoạn code trên, giả sử chúng ta đã viết sẵn hàm DeletePost rồi. Khi người dùng thực hiện thao tác xóa, một request sẽ gửi đến server. Thì Server kiểm tra xem acction là gì, nếu action là xóa, lập tức gọi đến hàm xóa có sẵn với việc truyền tham số vào thôi.
Ở đoạn code ví dụ, tôi sử dụng module Url để parse các param trong queryString do client request dạng: ?action=delete&id=123. Sau này khi dùng các Module như Express chẳng hạn, thì việc get các tham số đơn giản hơn nhiều. Hơn nữa url của ứng dụng sẽ friendly hơn.

Chúng ta mở rộng ra là bất kì request nào từ người dùng, chứ không chỉ là các thao tác Update, Xóa, Sửa, Tạo mới. Như các request lấy thông tin chi tiết, request xem list, hay request từ chối một xác nhận nào đó.


2. Non Blocking IO

Là mô hình không chặn IO -(Input Output), mặc dù chương trình vẫn đang xử lý dữ liệu cũ chưa xong. Đối với một chương trình xây dựng theo mô hình Blocking IO (hay gặp với các chương trình chạy trên console) thì khi xử lý dữ liệu, chương trình sẽ ko cho input dữ liệu mới vào.

Khi người dùng request ứng dụng của bạn,web server truy xuất vào db lấy dữ liệu,dữ liệu trả về nó mới tiếp tục thực hiện lệnh kế tiếp.Thì với non-blocking nó ko ngồi chờ db trả về dữ liệu mà nó cứ thực hiện tiếp,tới phần nào cần đến dữ liệu trả về thì theo mình nó cho vào queue) 
Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

0 comments

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
Posts RSSComments RSSBack to top
© 2011 Tự học NodeJS ∙ Designed by BlogThietKe
Released under Creative Commons 3.0 CC BY-NC 3.0