分类目录归档:Network Programming

Grpc异步编程框架剖析

习惯了同步编程范式,初次使用异步框架可能会稍感不适,Grpc官方提供了greeter_async_client和greeter_async_server的示例,官网也只是基于该代码的注释作了简要说明(甚至包含错误),文档完善远跟不上社区开发进度,相关细节和原理并不完善,仅限于此似乎有些照猫画虎,不得其理,笔者打算以异步编程范式及其实现,作为Grpc系列的开篇,以官方示例作为切入点,深入展开,为以后对异步编程处理得心应手打下基础。
阅读全文

thrift 序列化字段读写的一个小坑

前段时间跟同事一块联调某系统时,client发送thrift序列化后的数据,本地打log能正确读到该字段,而server却收不到该字段的值,感到比较诡异,通过修改下读写的方法就ok了,花了一点时间踩了一个小坑,先从业务代码片段,再到源码分析,最后再与protobuf作对应点的简单比较,与大家分享下。
阅读全文

Java NIO SocketChannel write与DirectByteBuffer实现分析

系统部同事反映了一个问题,在Cassandra内部场景中使用了NIO通信,并使用了one client one thread模型,且不说这种通信模型的问题,同事反映每当有较大的数据传输时都会有很大的内存增长,看似内存泄露,其实这部分内存并不是jvm堆内存,实际叫堆外内存,不容易回收,下面我们先来分析为什么会有内存的不断增长,然后再给出一个比较好的解决方案。
阅读全文

thrift nonblocking server 实现源码剖析

现有网上资料对于thrift生产环境下使用绝大多数为Java应用(protobuf仅提供序列化且很长时间没开放RPC框架,主体语言确定为C/C++时RPC选型thrift个人觉得是被动选择,当然grpc则是后话,生产环境下性能比较暂未看到相关分析),C++的相关资料极其缺乏,对于网络服务相关开发,nonblock io multiplexing+线程池对于单机应用来说更为常见,所以关于thrift系列开篇以TNonblockingServer模型的实现为例进行分析,其他模型及模块稍后会奉上。
阅读全文