Thiết kế và hiện thực chương trình quản lý quảng cáo trên trang web sử dụng ISAPI Extensions

MỤC LỤC

Ứng dụng trên Web

Application Server (Server ứng dụng) : là phần mềm cung cấp các dịch vụ để hỗ trợ cho các ứng dụng Web làm chức năng kết nối người dùng đầu cuối với cơ sở dữ liệu cộng tác. Nó hoạt động như một môi giới trung gian giữa trình duyệt Web và Database Server, nhờ đó không cần phải cài đặt ứng dụng đòi hỏi cao về mặt bảo trì cho người dùng đầu cuoái.

CGI và ISAPI

  • ISAPI

    IIS là web server đầu tiên hỗ trợ cho mô hình API này, tuy nhiên lập trình ISAPI không chỉ có ở IIS, hoặc đối với server chạy WinNT/Windows95, mà còn được hỗ trợ ở nhiều server khác. Tuy nhiên đối với ISAPI, nếu ta sử dụng bộ nhớ được cấp phát, rồi sau đó không giải phóng bộ nhớ khi ra khỏi chương trình, thì bộ nhớ sẽ bị giữ cho tới khi process của Web server chấm dứt.

    Bảng các biến môi trường CGI
    Bảng các biến môi trường CGI

    So sánh và đánh giá

    Hoạt động của một ứng dụng CGI

    Những chương trình CGI có thể được viết bằng bất kỳ ngôn ngữ nào có thể xuất ra standard output, trong khi đó chương trình ISAPI chỉ có thể được viết bằng ngôn ngữ có thể tạo ra những file DLL. Tuy nhiên, khác biệt cơ bản nhất giữa ISAPI và CGI là : chương trình ISAPI chạy trong không gian địa chỉ của chính Web server (in-process), còn chương trình CGI chạy theo từng quá trình riêng biệt (out-of-process).

    Overhead giữa CGI và ISAPI

    Với CGI, mỗi lần một Web server nhận một yêu cầu, nó phải khởi tạo một process mới do đó đòi hỏi phải có một tài nguyên lớn để duy trì những process này. Ưùng dụng ISAPI có overhead thấp hơn ứng dụng CGI, vì chúng không đòi phải tạo ra thêm những process và không phải thực hiện thời gian giao tiếp giữa những process.

    Tạo một ứng dụng Internet Server bằng ISAPI

    Nếu chạy ứng dụng CGI hoặc ISAPI ta cần lưu ý đến việc giám sát overhead của chúng.

    ISAPI EXTENSIONS

    DLL (Dynamic-Link Library) trong ISAPI Extensions

    Khi người sử dụng tại client bắt đầu upload dữ liệu đi, anh ta sẽ gửi đi một giá trị lớn header Content-Length:, để chỉ ra khối lượng dữ liệu mà mình muốn gửi. Nếu extension chỉ lặp cho tới khi nhận được toàn bộ lượng dữ liệu này, ta sẽ gặp phải vấn đề khó khăn khi user huỷ bỏ upload dữ liệu giữa chừng hoặc nối kết mạng bị trục trặc khi dữ liệu mới đi được nửa đường.

    MFC cho ISAPI

      Nếu ta override hàm CHttpServer::ConstructStream(), ta có thể trực tiếp gọi constructor của class CHtmlStream bằng cách sử dụng CHtmlStream(UNIT nGrowBytes), với nGrowBytes là kích thước bộ nhớ cấp phát cho mỗi khối. Khi extension keỏt thuực, CHttpServerContext (thoõng qua CHttpServerContext :: WriteClient() ) seừ ghi ra những gì đã được cất giữ bên trong đối tượng CHtmlStream, và CHtmlStream giải phóng bộ nhớ đã cấp phát cho stream (stream là dòng dữ liệu được xuất ra thông qua standard ouput).

      Sử dụng ISAPI Extension để truy xuất database

        Đối tượng của class CDatabase tiêu biểu cho những kết nối với data source, và đối tượng của CRecordset tiêu biểu cho những recordset (rowset). Ta ít khi sử dụng class được derive từ CDatabase nhưng thường xuyên derive class từ CRecorset để so trùng cột trong những bảng của database. Hỡnh 2.15 Moỏi quan heọ class MFC ODBC database. Database Dynaset hoặc. Sau đây là một số hàm quan trọng của class CRecordset :. AddNew - Chuẩn bị thêm một record mới vào bảng. Update - Hoàn tất tác vụ AddNew và Edit bằng cách lưu dữ liệu mới hoặc đã được sửa vào trong data source. Delete - Xoá record hiện hành khỏi recordset. Edit - Chuẩn bị thực hiện những thay đổi trên record hiện hành. IsOBF - Xác định liệu recordset có được định vị trước record đầu tiên khoâng. IsEOF - Xác định liệu recordset có được định vị sau record đầu tiên khoâng. MoveNext - Thiết lập record hiện hành cho record kế tiếp hoặc rowset kế MoveFirst - Thiết lập record hiện hành cho record đầu tiên trong recordset. MoveLast - Thiết lập record hiện hành cho record cuối cùng trong recordset hay cho rowset cuoái. MovePrev - Thiết lập record hiện hành cho record ngay trước hoặc cho rowset trước. GetDefaultConnect - Lấy chuỗi kết nối mặc định cho data source mà trên đó thiết lập recordset. GetDefaultSQL - Lấy chuỗi SQL mặc định. DoFieldExchange - Chuyển đổi dữ liệu giữa field dữ liệu trong recordset và record tương ứng trên data source. GetStatus - Lấy chỉ số của record hiện hành trong recordset và trạng thái tớnh cuoỏi cuứng. GetRecordCount - Xác định record được đánh số cao nhất khi user di chuyển qua các record. GetODBCFieldCount - Lấy số field trong một đối tượng recordset. GetODBCFieldInfo - Lấy thông tin về field trong một recordset. sẽ nối kết vào ODBC với tên của data source là "Student Registration". ISAPI trong vieọc truy xuaỏt database :. Hình sau mô tả quá trình truy xuất dữ liệu của một chương trình CGI/ISAPI :. a) Ghi dữ liệu : sử dụng hàm CDatabase::OpenEx(). Khi sử dụng hàm CDatabase::Open(), nếu tham số không xác định đủ thông tin để tạo kết nối ODBC (như quên hoặc sai user name hay password), MFC sẽ tự động mở hộp thoại kết nối ODBC để yêu cầu thêm thông tin từ người dùng.

        Hỡnh 2.15  Moỏi quan heọ class MFC ODBC database
        Hỡnh 2.15 Moỏi quan heọ class MFC ODBC database

        CHUAÅN ODBC - INTERNET INFORMATION SERVER

        Chuaồn ODBC (Open Database Connectivity)

        Trước khi ODBC trở thành một chuẩn không chính thức cho các chương trình ứng dụng trên Windows giao tiếp với các hệ thống database, người lập trình phải sử dụng các ngôn ngữ riêng cho mỗi database mà họ muốn kết nối tới. Như vậy, ta có thể phát triển ứng dụng theo một hệ thống database này (chẳng hạn như Microsoft Access) nhưng lại biến đổi thành sản phẩm sử dụng hệ thống database khác (ví dụ như Microsoft SQL Server) bằng cách đơn giản là thay đổi driver được sử dụng DSN mà chúng ta định nghĩa trong ứng dụng.

        Internet Information Server (IIS)

        • Internet Information Server (IIS) 1.Giới thiệu

          Anonymous logon được xem như là khách (guest) của domain, do đó ta phải kiểm tra quyền hạn được gán cho những guest trên mạng của mình, để bảo đảm rằng anonymous logon không được cho phép những quyền hạn không phù hợp. Bởi vì nếu cho phép anonymous logon, ta có thể dễ dàng điều khiển quyền hạn của mỗi user thông qua tài khoản anonymous được thiết lập bởi IIS, hơn nữa không thể bảo đảm rằng tài khoản của user đã được mã hoá không thể nào bị xâm phạm, vì thế anonymous logon là hình thức bảo mật hơn cả.

          NHỮNG KHÁI NIỆM VỀ QUẢNG CÁO TRÊN WEB

          Một số định nghĩa

          Ad banner nào có click-rate càng lớn có nghĩa là ad banner đó thu hút nhiều người xem, cũng có nghĩa là có nhiều người click trên ad banner đó. Khi biết được tỷ lệ click-through, Advertiser sẽ quan tâm nhiều đến ad banner có click-rate cao hơn, và sửa đổi (hoặc thay thế) những ad banner có tỷ lệ click-rate thấp.

          Chiến lược quảng cáo

            Tuy là bộ phận nhỏ nhưng đoạn văn bản này khá quan trọng trong việc định hướng người dùng tới trang web của Advertiser, vì đoạn văn bản với những từ ngữ gây ấn tượng sẽ kích thích trí tò mò của người sử dụng và do đó họ sẽ rất dễ nhấn vào ad banner. Điều này không có nghĩa là chúng xuất hiện quá nhanh làm cho người sử dụng không thể thấy được mà điều này có nghĩa là thời gian đưa ad banner lên trang web kể từ khi người sử dụng vào một trang đến khi ad banner hiện lên là phải tối thiểu.

            HIỆN THỰC CHệễNG TRèNH

            Phaõn tớch chửụng trỡnh

              Thoõng tin trong campaign bao goàm : soỏ hieọu cuỷa campaign, teõn campaign, teõn của người quản lý campaign, tổng số impression, tổng số click-through, trạng thái của hợp đồng giữa AdMaster và Advertiser, thời điểm campaign được tạo ra. Ngoài ra ta còn lưu trữ thêm một số thuộc tính khác của ad banner như : redirect URL, text nằm bên dưới ad banner (alt text), banner URL, tên file ad banner, trang HTML nằm dưới ad banner, chiều rộng và chiều cao của ad banner.

              Mô tả chương trình

                Thông tin trong bảng này gồm những thông tin đã có trong bảng Register cộng thêm một số thông tin mà AdMaster cần bổ sung cho Advertiser (phần này sẽ được trình bày chi tieát hôn trong phaàn sau). Một chức năng cũng rất quan trọng là AdMaster có thể tạo (xoá, sửa đổi) nhóm hoặc nhóm con, thêm (xoá) ad banner vào bất kỳ nhóm/nhóm con nào nhằm mục đích target trên Web server.

                Cơ sở dữ liệu

                  Select @strSQL = 'Create Table '+ @fn +'(INTERN_AD_NUMBER varchar(15) not null primary key,INTERN_CAMPAIGN_NUMBER int NOT NULL,INFO_AD_TITLE varchar(50) )'. If exists (select * from sysobjects where id = object_id(@strtablename) and sysstat & 0xf = 3) exec ('DROP TABLE'+@strtablename). f ) DropLogTable: xoá các bảng log.

                  Bảng Groups : (chứa tất cả thông tin của nhóm/nhóm con)
                  Bảng Groups : (chứa tất cả thông tin của nhóm/nhóm con)

                  Giải thuật đưa banner quảng cáo ra trang Web

                    Nếu ta gán trọng số ở mức Campaign của Advertiser, thì ta sẽ không thể so sánh trọng số của một ad banner trong Campaign này với trọng số của ad banner khác trong Campaign của Advertiser khác. Dù trong bất kỳ trường nào, con số rand_num được chọn luôn nằm trong đoạn từ 0 tới 100, phù hợp với cách đặt trọng số của ad banner.

                    CÁC THÀNH PHẦN CHÍNH của ADSERVER

                    • QUY TRÌNH THỰC HIỆN

                      Thống kê tương tự như như ở mục 1 ở trên nhưng thể hiện chi tiết về mặt thời gian như thống kê theo ngày (date), theo một thời điểm cho trứớc.  Bảng: Groups, Groupbanners các bảng Logs.  Chức năng: thông báo số lần hiển thị, clicks và tần số trên một ad banner theo ngày tháng, theo giờ và theo tên nhóm/nhóm con. của một Advertiser. Như đã biết, để đánh giá mức độ hiệu quả của ad banner, ta kiểm tra tỷ lệ click- through cuûa chuùng. Advertiser thoỏng keõ ad banner theo boỏn tieõu chuaồn sau:. - Theo giờ trong ngày. - Theo taàn soỏ xuaỏt hieọn. Trong mỗi phần thống kê đều có đưa ra những số liệu về impression, click-through và tỷ lệ click-through. a) Thống kê theo nhóm : được thực hiện theo các bước như sau - Xét một banner (banner_ID). - Lấy thông tin về impression và click-through thông qua bảng Logs thời gian (logs_date). - Tớnh tyỷ leọ click-through. - Xuất ra browser : giờ mà ad banner xuất hiện , số impressions, số click và tỷ leọ click-through cuỷa ad banner. d) Thống kê theo tần số xuất hiện : được thực hiện theo các bước như sau - Xét một banner (thông qua Banner_ID).

                      Bảng Advertisement có trong hệ thống với tên gọi AD+ ‘AccountID’
                      Bảng Advertisement có trong hệ thống với tên gọi AD+ ‘AccountID’