thrift oneway的问题

本文探讨了在使用Thrift时遇到的Oneway消息发送与接收不一致的问题。通过实验发现,当Oneway接口定义时,客户端将消息写入本地缓冲区即返回,消息是否成功发送依赖于网络。分析指出,如果客户端退出太快,可能会导致消息丢失。而同步的非oneway方式在服务端收到消息后会回应,确保消息传递的可靠性。因此,合理使用oneway需要根据场景对可靠性和速度的需求来判断。
摘要由CSDN通过智能技术生成

今天同事试验oneway的时候,发现client发送的消息数目和server接收的不一致。自己也做了下试验。发现也是不一致。

数据结构定义如下:book.thrift

namespace cpp codelab

struct Book {
1: i32 book_id
2: string name
}

server 端 hello.thrift 定义如下:

include "book.thrift"

namespace cpp codelab_proto

service HelloBook {
oneway void ping(1: book.Book book)
}

server代码大致如下

class HelloBookHandler : virtual public HelloBookIf {
public:
HelloBookHandler() {
// Your initialization goes here
}

void ping(const codelab::Book& book) {
// Your implementation goes here
++count;
printf("book name: %s,%d\n", book.name.c_str(), count);
}
private:
static volatile int count;
};
volatile int HelloBookHandler::count = 0;

int main(int argc, char **argv) {
// create the

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值