相关疑难解决方法(0)

Thrift vs Protocol缓冲区

我已经使用PB很长一段时间了,但是,Thrift一直在我的脑海里.

正如我所看到的那样,节俭的主要优点是:

  1. 本地集合(即向量,集等)与PB重复提供类似但不完全相似的功能(除非你深入研究文档声明"在大多数情况下不需要"的RepeatedField),否则没有迭代器.
  2. 提供了一个不错的RPC实现,而不是只是挂钩插入自己的.
  3. 更多官方支持的语言(PB为Java,C++,Python提供"官方"支持)

Thrift的缺点:

  1. RPC实现意味着我无法在顶部插入我自己的(例如)加密/认证层.
  2. Windows支持看起来不是很好.
  3. PB肯定似乎有更容易获得的文档,如果不是更好的话.

中性:

  • Windows(Thrift)上.lib/.dll的未知大小.
  • Windows上大尺寸的.lib(PB,但确实提供了明显更小的-lite).
  • 速度明智,他们似乎都很相似.

我还没有准备好冒险尝试切换到Thrift,有人可以给我更多的优点/缺点,或者有理由去某种方式吗?

谢谢!

c++ windows thrift protocol-buffers

43
推荐指数
4
解决办法
1万
查看次数

使用fwrite/fread和数据结构的几个问题

我正在使用fwrite()并且fread()第一次将一些数据结构写入磁盘,我对最佳实践和正确的处理方式有几个问题.

我正在写入磁盘(所以我以后可以读回来)是在Graph结构中插入的所有用户配置文件.每个图形顶点都是以下类型:

typedef struct sUserProfile {
    char name[NAME_SZ];
    char address[ADDRESS_SZ];
    int socialNumber;
    char password[PASSWORD_SZ];

    HashTable *mailbox;
    short msgCount;
} UserProfile;
Run Code Online (Sandbox Code Playgroud)

这就是我目前正在将所有配置文件写入磁盘的方式:

void ioWriteNetworkState(SocialNetwork *social) {
    Vertex *currPtr = social->usersNetwork->vertices;
    UserProfile *user;

    FILE *fp = fopen("save/profiles.dat", "w");

    if(!fp) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    fwrite(&(social->usersCount), sizeof(int), 1, fp);

    while(currPtr) {
        user = (UserProfile*)currPtr->value;

        fwrite(&(user->socialNumber), sizeof(int), 1, fp);
        fwrite(user->name, sizeof(char)*strlen(user->name), 1, fp);
        fwrite(user->address, sizeof(char)*strlen(user->address), 1, fp);
        fwrite(user->password, sizeof(char)*strlen(user->password), 1, fp);
        fwrite(&(user->msgCount), sizeof(short), 1, fp);

        break;

        currPtr = currPtr->next;
    }

    fclose(fp); …
Run Code Online (Sandbox Code Playgroud)

c file-io fwrite fread data-structures

1
推荐指数
1
解决办法
2586
查看次数

标签 统计

c ×1

c++ ×1

data-structures ×1

file-io ×1

fread ×1

fwrite ×1

protocol-buffers ×1

thrift ×1

windows ×1