商业服务器简单模型:ACE + boost + mongodb + openssl + jsoncpp



一,安装ACE

(1)下载

下载地址:http://download.dre.vanderbilt.edu/

下载ACE-6.1.0.tar.bz2,这个软件包只包含ACE,不包含TAO等附加的东西,另外bz2压缩格式的源码包比较小,只有7.55M。

(2)解压

mkdir ace-install

tar jxf  ACE-6.1.0.tar.bz2 -C ace-install

(3)配置

    1. 首先使用命令# gcc -v查看gcc版本,确保gcc版本至少为3.79.1。如果gcc版本较低,需要升级gcc。参见gcc升级步骤
    2. 设置环境变量ACE_ROOT为解压后的源码目录。如:# export ACE_ROOT=/root/ace-install/ACE_wrappers
    3. 创建文件 $ACE_ROOT/ace/config.h,包含如下内容:
      1. #include "ace/config-linux.h"   
    4. 创建文件 $ACE_ROOT/include/makeinclude/platform_macros.GNU,包含如下内容:
      1. include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU  
      2. INSTALL_PREFIX = /usr/local  
      注:没有“#”符号。上面的配置将会在make install时,将ACE库安装到 $INSTALL_PREFIX/lib 目录,将头文件安装到 $INSTALL_PREFIX/include 目录。
    5. 进入目录 $ACE_ROOT/ace,运行如下命令:
      1. make && make install  
      注:务必进入ace目录。在这个目录里将只编译ACE,不编译test和examples。这将节约大量时间。
    6. 创建文件/etc/ld.so.conf.d/ace-6.1.0.conf,包含如下内容:
      [html]  view plain copy print ?
      1. /usr/local/lib/  
      然后运行下面的命令:
      [html]  view plain copy print ?
      1. ldconfig  
      注:如果你的系统共享库连接目录已经包括了上面的目录,则跳过步骤6。
    7. 编写一个简单的ACE程序,在这里我就用最简单的Hello World了,代码如下:
      #include <ace/Log_Msg.h> 
      #include <ace/OS_main.h> 

      using namespace std; 

      int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) 

              ACE_DEBUG((LM_DEBUG, ACE_TEXT(“Hello World!”))); 
              return 0; 
      }
      编译:
      # g++ -I/usr/local/ACE/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"HelloWorld.d" -MT"HelloWorld.d" -o"HelloWorld.o" "HelloWorld.cpp"
      链接:
      # g++ -I$ACE_ROOT -L/usr/local/ACE/lib -o"ACETest" ./HelloWorld.o -lACE -lrt –lpthread
      注意:在链接的时候,必须要加-lACE –lrt -lpthread三个参数,否则会报错。
      执行:
      # ./ACETest
      成功执行的话,会打印出Hello World.

二,安装boost

(1)到www.boost.org下载相应的代码包,我下载的是boost_1_52_0.tar.bz2


(2)进入自己的工作目录执行解压操作:

  luoxiongwei@luoxiongwei:~$bzip2 -d boost_1_52_0.tar.bz2

  luoxiongwei@luoxiongwei:~$tar -xvf  boost_1_52_0.tar

  luoxiongwei@luoxiongwei:~$cd boost_1_52_0

  luoxiongwei@luoxiongwei:~/boost_1_52_0$ ./bootstrap.sh //生成安装工具bjamb2


(3)这里利用b2工具进行安装,可以使用./b2 --help 查看命令选项


(4)准备安装boost

luoxiongwei@luoxiongwei:~/boost_1_52_0$ sudo ./b2 install

安装完毕后的头文件默认是在/usr/local/include目录下,.a.so/usr/local/lib目录下。

然后将需要使用的库sudo cp/usr/lib 。不然在执行代码时,ldd会提示找不到.so文件。

(5)测试

#include <boost/lexical_cast.hpp>
#include <iostream>

int main()
{
using boost::lexical_cast;
int a = lexical_cast<int>("123");
double b = lexical_cast<double>("123.12");
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
return 0;
}
g++ -o boostTest boostTest.cpp

三,安装Mongo

ubuntu 可以直接用 sudo apt-get install mongodb 来安装。
(1)下载

----------------------------------------------------------------------------
(2)Linux下安装
第一步:下载安装包
下载版本:2.0.2-rc2
首先在linux中解压缩安装程序
通过命令操作:
解压:[root@localhost soft]# tar -zxvf mongodb-linux-i686-2.0.2-rc2.tgz
解压过程如下:
Dos代码   收藏代码
  1. [root@localhost soft]# tar -zxvf mongodb-linux-i686-2.0.2-rc2.tgz  
  2. mongodb-linux-i686-2.0.2-rc2/  
  3. mongodb-linux-i686-2.0.2-rc2/THIRD-PARTY-NOTICES  
  4. mongodb-linux-i686-2.0.2-rc2/GNU-AGPL-3.0  
  5. mongodb-linux-i686-2.0.2-rc2/README  
  6. mongodb-linux-i686-2.0.2-rc2/bin/  
  7. mongodb-linux-i686-2.0.2-rc2/bin/mongofiles  
  8. mongodb-linux-i686-2.0.2-rc2/bin/mongostat  
  9. mongodb-linux-i686-2.0.2-rc2/bin/bsondump  
  10. mongodb-linux-i686-2.0.2-rc2/bin/mongos  
  11. mongodb-linux-i686-2.0.2-rc2/bin/mongotop  
  12. mongodb-linux-i686-2.0.2-rc2/bin/mongodump  
  13. mongodb-linux-i686-2.0.2-rc2/bin/mongoimport  
  14. mongodb-linux-i686-2.0.2-rc2/bin/mongosniff  
  15. mongodb-linux-i686-2.0.2-rc2/bin/mongo  
  16. mongodb-linux-i686-2.0.2-rc2/bin/mongod  
  17. mongodb-linux-i686-2.0.2-rc2/bin/mongoexport  
  18. mongodb-linux-i686-2.0.2-rc2/bin/mongorestore  
 
我们把  mongodb-linux-i686-2.0.2-rc2 重命名为mongodb
我们把在mongodb目录下新建一个data目录存放数据、新建一个log目录存放日志,然后在该目录下新建一个日志文件,例如我们命名为mongodb.log
Dos代码   收藏代码
  1. [root@localhost mongodb]# mkdir log  
  2. [root@localhost mongodb]# mkdir data  
  3. [root@localhost mongodb]# cd log  
  4. [root@localhost log]# touch mongodb.log  
然后定位到mongodb/bin目录中
Dos代码   收藏代码
  1. [root@localhost local]# cd mongodb/bin  
使用mongod命令建立一个mongodb数据库链接,端口号设置为100001,数据库的路径为/mongodb/data,日志路径为/mongodb/log/mongodb.log
启动命令    
Dos代码   收藏代码
  1. [root@localhost mongodb]# ./bin/mongod -port 10001 --dbpath data/ --logpath log/mongodb.log  
  2. all output going to: log/mongodb.log  
使用客户端来连接该数据库
重新开启一个终端,然后切换到mongodb目录下:
Dos代码   收藏代码
  1. [root@localhost /]# cd usr/local/mongodb  
然后使用bin/mongo命令来连接该数据库
Dos代码   收藏代码
  1. [root@localhost mongodb]# ./bin/mongo localhost:10001  
  2. MongoDB shell version: 2.0.2-rc2  
  3. connecting to: localhost:10001/test  
  4. >  
  5. bye  
往数据库中插入值
Dos代码   收藏代码
  1. connecting to: localhost:10001/test  
  2. > db.foo.save({a:1})  
从数据库中查询
Dos代码   收藏代码
  1. > db.foo.find()  
  2. "_id" : ObjectId("4ee66eb440ef7803a9873d2d"), "a" : 1 }  
  3. >  
通过浏览器访问
在浏览器地址栏输入:  http://localhost:10001/  然后回车访问
可以看到如下提示:You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number
然后根据提示把端口号加上1000访问  http://localhost:11001/ 
就能够访问到Monodb的服务端web页面

通过配置文件来配置Mongodb
首先在mongodb目录下新建一个文件,文件名任意,在这里我取名为:mongodb.conf
Dos代码   收藏代码
  1. [root@localhost mongodb]# vi mongodb.conf  
然后在配置文件中添加配置信息
Txt代码   收藏代码
  1. port=10001  
  2. dbpath=data/  
  3. logpath=log/mongodb.log  
  4. logappend=true  
解释说明:
port=10001【代表端口号,如果不指定则默认为  27017 
dbpath=data/ 【数据库路径】
logpath=log/mongodb.log 【日志路径】
logappend=true 【日志文件自动累加,而不是覆盖】
启动Mongodb服务   
Dos代码   收藏代码
  1. [root@localhost mongodb]# ./bin/mongod -f mongodb.conf  
  2. all output going to: log/mongodb.log  
然后访问方式和之前的一样。

(2)编译源码安装

由于mongodb的兼容性并不好,很多情况下,最好是需要自己从源码编译。

安装前准备
1/ 安装boost库
2/ 安装scons程序

方法一:
$ git clone git://github.com/mongodb/mongo.git
$ cd mongo
$ cat docs/building.md
$ scons .

经过一段时间的编译,即可生成mongodb的服务器端和客户端,还有c++客户端库。

方法二:
使用scons编译(要先安装scons程序)
从官网上面下载mongo源码(http://www.mongodb.org/downloads),我下载的版本是
mongodb-src-r2.0.7.tar.gz
解压缩之后生成mongodb-src-r2.0.7目录,cd到这个目录
然后执行命令:
scons --prefix=/urs/local/mongo
到时候会在/urs/local/mongo生成三个目录bin,include,lib
其中:
bin下包含mongo的服务端和客户端,还有其他的一些工具
include是mongo的头文件
lib是客户端的库,这里生成的cpp的客户端库
完成!

在源码的目录下,client/example下有一些简单的测试样例,可以编译一下:
cd到client/example下
编译first.cpp
 g++ first.cpp -o first -I/usr/local/mongo/include/mongo -L/usr/local/mongo/lib -llibmongoclient.a -lboost_thread -lboost_filesystem -lboost_program_options -lboost_system
编译clientTest.cpp
 g++ clientTest.cpp -o clientTest -I/usr/local/mongo/include/mongo -L/usr/local/mongo/lib -llibmongoclient.a -lboost_thread -lboost_filesystem -lboost_program_options -lboost_system

注意:
编译命令中库的链接顺序要小心,会影响编译是否成功!!!


四,安装openssl

ubuntu下可直接用sudo apt-get install openssl完成安装。

(1)下载openssl:http://www.openssl.org/source/
(2) 
tar -zxf openssl-0.9.8k.tar.gz    //解压安装包   
cd openssl-0.9.8k                 //进入已经解压的安装包   
./config                          //配置安装。推荐使用默认配置或--prefix=/usr/local/openssl指定路径。   
make && make install              //编译及安装,若失败可使用make test命令查看原因。   
openssl默认将被安装到/usr/local/ssl
 

五,安装Jsoncpp


(1)下载工具

说明:
  1. 安装JsonCpp需要下载JsonCpp和Scon还需要机器上有python

  2. scons,功能和GNU make一样,又比make简单多了。scons是python工具,需要先安装好pythons。

(1)安装

  • 安装 scons

        
        
    1. $ sudo apt-get install scons
  • 切换到 jsoncpp-src-0.5.0 目录

        
        
    1. $ python /usr/bin/scons platform=linux-gcc
  • 生成静态和动态库文件, 在 jsoncpp-src-0.5.0/libs/linux-gcc-4.7目录下

        
        
    1. libjson_linux-gcc-4.7_libmt.a
    2. libjson_linux-gcc-4.7_libmt.so

        
        
    1. $ sudo mkdir /usr/local/lib
  • 把两个库文件拷贝到/usr/local/lib目录下(若测试时发现无法找到so文件,则再拷贝到/usr/lib目录即可)

        
        
    1. $ sudo cp libjson_linux-gcc-4.7_libmt.* /usr/local/lib
  • 将静态库重命名为libjsoncpp.a libjsoncpp.so (mv 命令,为了在编译时可直接用-ljsoncpp,省去不少麻烦)

  • 切换到  jsoncpp-src-0.5.0/include 目录

        
        
    1. $ sudo cp -r * /usr/local/include/

(1)使用

  • 包含头文件

        
        
    1. #include <json/json.h>
  • 编译, 加链接选项 -ljsoncpp



六,注意事项

(1)编译boost需要python-dev的支持,一起其他的如libbz2-dev等也有可能缺失。根据编译错误提示的文件,可以用apt-file search命令来确定对应的包,再安装这个包即可。如“bzlib.h:没有那个文件或目录,编译中断”,

            apt-file search bzlib.h
得到:libbz2-dev:/usr/include/bzlib.h,
则利用sudo get-apt install libbz2-dev命令,问题解决。

(2)Mongodb c++ driver 不支持 BOOST_FILESYSTEM_VERSION=3,所以boost需要1.49以下的版本,或者1.49以上的需要手动设置禁用--disable-filesystem3。


(3)#define ACE_HAS_EVENT_POLL 1,使用ACE时一般需要使用epoll作为服务器IO模型,在config.h中添加epoll支持,再make && make install 即可。


(1)编译boost需要python-dev的支持。


(1)编译boost需要python-dev的支持。


(1)编译boost需要python-dev的支持。





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值