软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software, [doi: 10.13328/j.cnki.jos.000000] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
基于 TinyRPC 的 TinyNTP 程序设计
骆克云
1
1
(计算机软件新技术国家重点实验室(南京大学),江苏 南京 210023)
作者: 骆克云, E-mail: keyun@smail.nju.edu.cn
摘 要: RPCLIB 是一个利用 C++14 设计的 RPC 库,使用 msgpack 作为序列化库,使用 Asio 作为网络通信库,
它同时提供了客户端和服务器端的实现。本作业基于 RPCLIB 进行代码重构和必要精简,同时将客户端库和服务
器端链接库分离,最大程度降低耦合性,兼顾跨平台简化编译,形成 TinyRPC 库。在 TinyRPC 库之上,进行服
务器端和客户端编程,即本次作业 TinyNTP 任务。在 TinyNTP 中,服务器端采用多线程方式响应请求,使用 Lambda
表达式绑定 gettime 请求,同时建立认证机制,只有遵循特定握手协议的客户端才能访问到数据;在客户端,使用
Qt 绘制一个数字时钟界面,通过 RPC 请求获得服务器时间,同时根据请求响应的时间矫正获取的时间,然后将
数字时钟显示出来。最后,对 TinyRPC 的进一步优化作了展望.
关键词: RPC;NTP;RPCLIB;Qt;C++14
中图法分类号: TP311
TinyNTP Program Designing Based on TinyRPC Library
Luo Keyun
1
1
(State Key Laboratory for Novel Software Technology (Nanjing University), Nanjing 210023, China)
Abstract: RPCLIB is an RPC library designed with C++14, it uses msgpack as a serialization library, and Asio as a network
communication library. It also provides client-side and server-side implementations. This work is based on RPCLIB code refactoring and
necessary streamlining, which is called TinyRPC library, while the client library and server-side minimize coupling, it also provides a
method of simplified cross-platform compilation. On top of the TinyRPC library, the TinyNTP task is for server-side and client-side
programming. In TinyNTP task, the server-side uses multi-threaded way to respond to requests, and uses lambda expression to bind the
gettime requests. And meanwhile the authentication mechanism is established so that only clients that follow a specific handshake
protocol can access the data. On the client side, using Qt to draw a digital clock interface, obtaining server time via RPC request, the
acquisition time is corrected according to the time of the request response at the same time, and then displaying the digital clock. Finally,
the further optimization of TinyRPC is prospected.
Key words: RPC;NTP;RPCLIB;Qt;C++14
1 相关背景
1.1 RPC框架
RPC 采用 C/S 模式,客户端发送请求,服务端响应,底层网络协议为 TCP/IP。通常 RPC 除了进程间相
互通信外还可以实现不同语言之间的相互通信
RPC(远程过程调用)在分布式系统中处于基础地位,核心思想是将不同进程之间的通讯抽象成简单的函
数调用。基本的过程是客户端将参数序列化成数据流发送到客户端中,客户端从流中反序列化出参数后进行
业务处理,得到结果后将其序列化给客户端。从这些过程可以看出一个比较完善的 RPC 框架需要提供或调用
分布式系统第一次作业:利用 RPC 设计一个获取时间的小程序