pomelo基于nodejs服务器开源框架,比较牛逼的!
1、安装nodejs(官网下载地址) 安装python等 具体见官网说明
2、安装pomelo(见官方步骤)或者 http://blog.csdn.net/wangqiuyun/article/details/9243263
3、demo无法运行说明,1.1.1版创建出的demo浏览器点start server无响应,用firebug发现报“ReferenceError: Buffer is not defined” 这是bug解决办法 我不会用 所以我不用浏览器测试,采用非浏览器测试 (不过这说明你的环境配置成功了)
4、自己编译libpomelo库
(1)下载gyp 命令行:git clone https://github.com/martine/gyp.git 没有安装git的童鞋 可以直接下zip
进入gyp目录 命令行 执行 setup.py install 安装gyp
(2)下载libpomelo 命令行:git clone https://github.com/NetEase/libpomelo.git 或者 下载zip
使用gyp创建 libpomelo工程。 cmd 到 gyp根目录 执行 gyp.bat --depth=. libpomelo根路径/pomelo.gyp -Dlibrary=static_library -DTO=pc
成功之后就会在libpomelo下创建出vs工程
:
(3)编译libpomelo静态库
打开以上工程,选则整个解决方案,生成解决方案 就会编译出静态库 jansson.lib libpomelo.lib libuv.lib
(4)如何使用libpomelo.lib
创建C++ win32工程,引用静态库
A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。
B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
C 然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。
说明:libpomelo没有提完整的头文件路径 libpomelo\include只包含libpomelo自身的 jansson libuv 头文件需要去\libpomelo\deps下查找
最终的include文件如图:
(5)libuv.lib库运行需要 ws2_32.lib IPHLPAPI.lib Psapi.lib 按照“然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名” 添加几个库
(6)运行代码测试:
#ifdef _WIN32 #include <winsock2.h> #else #include <unistd.h> #endif #include <string.h> #include <stdlib.h> #include "pomelo.h" const char *ip = "127.0.0.1"; int port = 3010; // request callback void on_request_cb(pc_request_t *req, int status, json_t *resp) { if(status == -1) { printf("Fail to send request to server.\n"); } else if(status == 0) { char *json_str = json_dumps(resp, 0); if(json_str != NULL) { printf("server response: %s\n", json_str); free(json_str); } } // release relative resource with pc_request_t json_t *msg = req->msg; pc_client_t *client = req->client; json_decref(msg); pc_request_destroy(req); pc_client_stop(client); } void do_request(pc_client_t *client) { // compose request const char *route = "connector.entryHandler.entry"; //改成默认web-server的设置 json_t *msg = json_object(); json_t *str = json_string("hi~"); json_object_set(msg, "msg", str); // decref for json object json_decref(str); pc_request_t *request = pc_request_new(); pc_request(client, request, route, msg, on_request_cb); } // disconnect event callback. void on_close(pc_client_t *client, const char *event, void *data) { printf("client closed: %d.\n", client->state); } int main() { // create a client instance. pc_client_t *client = pc_client_new(); struct sockaddr_in address; memset(&address, 0, sizeof(struct sockaddr_in)); address.sin_family = AF_INET; address.sin_port = htons(port); address.sin_addr.s_addr = inet_addr(ip); // add some event callback. pc_add_listener(client, PC_EVENT_DISCONNECT, on_close); // try to connect to server. if(pc_client_connect(client, &address)) { printf("fail to connect server.\n"); pc_client_destroy(client); return 1; } do_request(client); // main thread has nothing to do and wait until child thread return. pc_client_join(client); // release the client pc_client_destroy(client); return 0; }
成功后的提示 :