Coder Social home page Coder Social logo

learn-tars's Introduction

腾讯开源框架Tars源码学习笔记---重写Tars rpc

前言

这个项目试图从最基本的epoll模型开始,一步步向官方Tars RPC靠拢,尽量记录下关键的结点。之所以选择这样做,是亲手实现一遍代码比单纯调试代码印象更为深刻。

选择将这个过程分享出来,是感觉这份笔记对于想短时间了解Tars源码主要逻辑脉络的人来说,会有一些帮助

使用的系统环境:

  • 操作系统版本:Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-42-generic x86_64)

  • GCC版本:gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)

怎样看这份笔记?

  • 代码提交记录可以很好的追踪代码变化。并且下面笔记中1.1、 1.2的内容与代码提交记录中的1.1、1.2是完全匹配的,可以对照理解

这只是实验性质的代码,因为更多关注主体逻辑,很多细节可能忽略掉了

代码编译只需要运行./run.sh,大多数人都可以轻松编译调试

正文

1 建立Tars RPC Server 异步模型框架

2 建立RPC client异步框架

3 RPC Server加入协程

4 进一步完善RPC Client(同步)

5 进一步完善RPC Client(异步)

6 进一步完善RPC Server

7 Framework篇:NodeServer

8 Framework篇:AdminRegistryServer

更多

作者:路小饭

微信号:luguangfamily

邮箱[email protected]

微信

参考资料:https://github.com/TarsCloud/Tars

learn-tars's People

Contributors

myicefrog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

learn-tars's Issues

请教一个问题:

同步调用的时候,最后一步是:

void CommunicatorEpoll::notify(size_t iSeq,ReqInfoQueue * msgQueue)
{
    if(_notify[iSeq].bValid)
    {
        _ep.mod(_notify[iSeq].notify.getfd(),(long long)&_notify[iSeq].stFDInfo, EPOLLIN);
        assert(_notify[iSeq].stFDInfo.p == (void*)msgQueue);
    }
    else
    {
        _notify[iSeq].stFDInfo.iType   = FDInfo::ET_C_NOTIFY;
        _notify[iSeq].stFDInfo.p       = (void*)msgQueue;
        _notify[iSeq].stFDInfo.fd      = _notify[iSeq].eventFd;
        _notify[iSeq].stFDInfo.iSeq    = iSeq;
        _notify[iSeq].notify.createSocket();
        _notify[iSeq].bValid           = true;

        _ep.add(_notify[iSeq].notify.getfd(),(long long)&_notify[iSeq].stFDInfo, EPOLLIN);
    }
}

这一步是吧fd加到了epoll的监听中,epoll监听收到了NOTIFY类型的消息,就会发送该消息,那是怎么触发epoll的呢?

菜鸡有个问题没看懂...

2019-06-26 23-12-05屏幕截图
在你的第一个commit的代码中,为何直接运行/tar-demo 时候,这时候没有客户端连接,epool_wait会被触发有两个事件,先close后noify,我看到代码中这里对应着两个不同的套接字,
epoller.add(_shutdown_sock, H64(ET_CLOSE), EPOLLIN);
epoller.add(_notify_sock, H64(ET_NOTIFY), EPOLLIN);
epoller.add(_sock, H64(ET_LISTEN) | _sock, EPOLLIN);
可是除了第二个参数不同外,就没有什么不同了这里会产生什么影响码.. 还有这里为什么要用H(64)这个宏定义进行左移32位操作额,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.