用CppCMS实现web site并同时支持json_rpc服务

来源:互联网 发布:单机优化神作 编辑:程序博客网 时间:2024/06/02 04:16

刘怀宇

1.将cppcms-0.99.10/examples/json_rpc/rpc.cpp文件中的json_service类拷贝到
examples/templates/hello-tmpl.cpp 中
2.修改hello-tmpl.cpp 中的main函数,添加两个服务

int main(int argc,char ** argv){    try {        cppcms::service srv(argc,argv);        srv.applications_pool().mount(cppcms::applications_factory<my_hello_world>() , cppcms::mount_point(std::string("/html")) );srv.applications_pool().mount(cppcms::applications_factory<json_service>() , cppcms::mount_point(std::string("/jsonrpc")) );        srv.run();    }    catch(std::exception const &e) {        std::cerr<<e.what()<<std::endl;    }}


3.修改config.js 文件,添加 script_names : /jsonrpc , /html
{    "service" : {"api" : "http","port" : 8080    },    "http" : {"script_names" : ["/jsonrpc","/html"]    }}




4.在first.tmpl 中使用如下的html文本 替换掉原来的html

<html><body><script type="text/javascript">function call() {                var xhr = new XMLHttpRequest();        xhr.open("post", 'http://localhost:8080/jsonrpc');        // Required by JSON-RPC over HTTP        xhr.setRequestHeader("Content-Type","application/json");        // It is better to use real formatter like JSON.js        x=parseInt(document.getElementById('x').value);        y=parseInt(document.getElementById('y').value);        var request = '{"method":"div","params":[' + x + ',' + y +'],"id":1}';        xhr.onreadystatechange = function() {                if (xhr.readyState === 4) {                        res = 'Unknown Error';                        if(xhr.status === 200) {                                // Don't call eval in real code use some parser                                var result = eval('(' + xhr.responseText + ')');                                if(result.error==null) {                                        res = result.result;                                }                                else {                                        res = result.error;                                }                        }                        document.getElementById('result').innerHTML = res;                }        }        xhr.send(request);         return false;}</script><form onsubmit="return call();"><p><input type="text" id="x" /><input type="submit" value="/" /><input type="text" id="y" /> = <span id="result"></span></p></form></body></html>



5.make
6. 执行生成的hello-tmpl     ./hello-tmpl -c config.js

7. 访问http://localhost:8080/html 在返回的html页面中计算除法,即可成功访问后台的json服务,得到结果

8.注意,IE6不支持JSON_RPC技术。


原创粉丝点击