• [原]pomelo开发环境搭建


    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没有提完整的头文件路径 libpomeloinclude只包含libpomelo自身的 jansson libuv 头文件需要去libpomelodeps下查找

    最终的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.
    ");
      } else if(status == 0) {
        char *json_str = json_dumps(resp, 0);
        if(json_str != NULL) {
          printf("server response: %s
    ", 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.
    ", 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.
    ");
        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;
    }

    成功后的提示 :

  • 相关阅读:
    geoServer的安装
    类设计原则
    零散知识点
    JavaScript setTimeOut()方法的一些疑点自己记录
    贴吧表情雨
    Laravel中tosql()是如何返回sql
    关于new static 与 new self的区别(后续有新发现,会继续更新)
    Lumen、Laravel开发问题记录
    文件实时对比,将数据组装入库(SQLITE)
    PHPSTUDY下升级mysql后无法启动
  • 原文地址:https://www.cnblogs.com/U-tansuo/p/pomelo.html
Copyright © 2020-2023  润新知