- Back to Home »
- Networking »
- Web Application (Wt)
Wednesday, October 7, 2015
Thông thường để xây dựng một trang web / ứng dụng web bạn cần hai thành phần
- web server (apache, lighttpd, boa, ...)
- source code web (html, javascript, php, ...)
Cách này thường được dùng để xây dựng các trang web để xuất bản lên internet mà ta truy cập hằng ngày.
Trong thưc tế các thiết bị mạng mà bạn sử dụng hằng ngày như router, modem <wifi>, switch<repeater wifi> đều được build sẵn một giao diện qủan trị bằng giao diện web mà bạn dễ dàng truy cập bằng địa chỉ ip gateway như 192.168.1.1
Cũng là một giao diện web như các trang web thôngg thường nhưng có sự khác biệt lớn về nguyên tắc hoạt động bên trong. Thay vì source code được viết bằng các ngôn ngữ web thì ở đây source code được viết bằng các ngôn ngữ khác như C/C++, Perl hay Python, để làm được điều đó người ta cần một bộ công cụ gọi là web application toolkit.
Chính vì source code không được viết bằng ngôn ngữ web nên trong quá trình chạy, nó cần một chương trình thông dịch đứng ở giữa để làm nhiệm vụ dịch các http request thành các API C/C++ tương ứng, thưc thi request bằng C/C++, trả lại kết quả, chương trình thông dịch sẽ dịch các kết quả trả về thành http respond thông thường. Chương trình đứng giữa đó gọi là CGI.
Kiểu hoạt động này có ưu điểm thực thi rất nhanh và ổn định, có thể dễ dàng điều khiển truy cập các thành phần / thiết bị ngoại vi của thiết bị vì request đã được dịch sang ngôn ngữ C/C++, chính vì thế nó là cách để xây dựng các giao diện quản trị nền web của các thiết bị nhúng như router, modem ... mà ta thường thấy.
Trong bài viết này sẽ hướng dẫn xậy dựng một Web Application Toolkit dựa trên bộ công cụ Web Toolkit gọi là Wt.
Thư viện phụ thuộc (tối thiểu):
- boost
- fcgi
- openssl
- zlib
Xem hướng dẫn cross.
Có thể build thêm các lib sau để dùng full tính năng cảu Wt:
- GraphicsMagick-1.3.21
- postgresql-9.4.4
- pango-1.37.0
1. Build Wt:
mkdir release
cd release
"create ToolChain.cmake in release directory"
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++)
SET(CMAKE_FIND_ROOT_PATH /path/to/dependent/install)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(BOOST_DIR /path/to/boost/install)
SET(BOOST_INCLUDEDIR /path/to/boost/install/include)
SET(BOOST_LIBRARYDIR /path/to/boost/install/lib)
"create Makefile by cmake"
DEPEND_LIB_DIR=/path/to/dependent/install
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS="-L${DEPEND_LIB_DIR}/lib -pthread -lm"
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
export PREFIX=/friendlyarm
cmake -DCMAKE_TOOLCHAIN_FILE=ToolChain.cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$PREFIX ..
make
make install
Chú ý:
- CMAKE_FIND_ROOT_PATH: path đến thư mục install các thư viện phụ thuộc đã installed (boost, fcgi, openssl, ...)
- BOOST_DIR: path đến thư mục đã installed boost
Nói chung nên install tất cả các thư viện phụ thuộc vào chung một folder
2. Buid Wt application
Chương trình ví dụ hello.C được lấy trong thư mục examples của gói thư viện Wt.
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
export CROSS=arm-none-linux-gnueabi-
export HOST=arm-none-linux-gnueabi
DEPEND_LIB_DIR=/path/to/dependent/install
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS="-L${DEPEND_LIB_DIR}/lib -pthread -lm -lwt -lwthttp -lwtfcgi"
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
LIBS="-Wl,-rpath-link -Wl,$DEPEND_LIB_DIR/lib"
"build"
arm-xilinx-linux-gnueabi-g++ hello.C -o hello ${CFLAGS} ${LDFLAGS} ${LIBS}
Chạy ví dụ:
"run"
./hello --docroot . --http-address 0.0.0.0 --http-port 80 #port web 80
Mở trình duyệt lên và truy cập địa chỉ http://localohost
Wt sẽ chạy một web server local được build-in có tên wtpttp, nếu bạn muốn truy cập được ứng dụng web app như trên từ một máy tính khác thì cần một web server như appache hay lighttpd.
Trong blog này chúng ta sử dụng lighttpd cho đơn giản, sua khi build xong web server các bước cần thực hiện là:
- chạy web server
- chạy ví dụ hello ở trên
- trên một máy tính khác, mở trình duyệt vào truy cập
http://192.168.1.100 trong đó 192.168.1.100 là địa chỉ của máy server.