didi001

实习

10.20

周2入职上午入职培训,下午领电脑,熟悉下苹果操作系统

10.21

一大早过来安装vs,最后发现苹果不必安装vs,直接公司分配开发机,然后只需要看一下代码,用VScode看一下就好了,
把苹果操作系统升级了10.15,安装了iterm2一个类似Xshell的shell软件,安装了类似linux系统的apt-get命令一样的软件商城homebrew,可以使用brew命令来安装需要的东西,拆卸也是很方便只需要在访达里把该软件拖到废纸篓再清一下废纸篓就好了。所有下载的东西都在访达这里的下载目录下。Mac系统的访达类似windows的我的电脑,有一个系统偏好设置也很常用,

10.22周四

把代码考到开发机,不能运行,
晚上赶上团建

10.23

1024程序员节
代码在开发机上还是跑不出来,因为一些依赖库从公司gitLab中没有权限下载,所以还是跑不出来,
中间也遇到几个报错的,

10.27周2

权限申请完了,可以在开发机上面build,也生成了相应的可执行文件,但是还没有执行的环境,彪哥在开会,等会过来帮我看一下!,现在已经是下午4.42了
今天又发了2个橘子,之前发过两个橙子,和可乐。

10.28周3

thriftIDL一种提供接口的语言
Interface Definition Language
一个链接

服务{}的语法:数据类型名 变量名(形参列表)


service MuService {
    mu_base.Ba_Res Batch(1: mu_base.Ba_Request req);
}
这写在一个mu_base.thrift文件中(写服务(或者构造的数据类型:结构体)的文件)
mu_base是一个文件名(应该是C++中的类,对应thrift语法:就是mu_base.thrift文件名的前缀)
Ba_Res是文件中的结构体,是一种数据类型
Ba_Request也是文件中的用结构体定义的数据类型,形参数据类型

10.29周四

把那个脚本的ip改了,但是呼叫服务的这个脚本缺thrift. thrift模块,不能执行,公司开了一个会,ranker架构的东西
11.04周3
使用别名,指代高级用户的下的python,就可以执行了
在~/.bashrc 文件中
alias python=/home/高级用户/pyenvs/predator/bin/python
就好了!!!

11.05周4
目标:把日志看懂,把rp接口看懂。
日志看懂了,听彪哥把controller.cpp代码逻辑了解了一下,知道各下游模块的调用了。打印日志函数入口和出口打印信息。
把rp接口的各结构体的嵌套关系听了一下,明天早上再过来看看,
11.19周4
一个线程知识的链接111
另外一个关于pthread,brpc架构
平衡检索二叉树-红黑树

11.26周四

BRPCbrpc开源框架

11.27周二

一个错误:

In file included from /home/service.cpp:1:0:
_service.h: In static member function ‘static void* ::SimpleService::startDynamicStatusCheck(void*)’:
service.h:162:22: error: invalid use of member ‘its::route_planner_common::SimpleService::check_inited’ in static member function
std::atomic_bool check_inited;
^
_service.cpp:160:5: error: from this location
check_inited=true; //
^
make[2]: *** [CMakeFiles/route_planner_common.dir/src/status_check/simple_service.cpp.o] Error 1
make[1]: *** [CMakeFiles/route_planner_common.dir/all] Error 2
make: *** [all] Error 2

startDynamicStatusCheck是一个静态成员方法(static 跟随类),不能修改动态的成员变量(跟随对象),而这个check_inited成员变量,每次请求都会不同,所以要变化。而静态成员函数也会用到这个动态的,怎么处理?
使用指针,修改,

错误提示语法:in file 文件名xxx,行号:yyy:错误信息error :zzz

第2个问题:

ulimit -a查看然后使用:
ulimit -n 2048
一个解决链接

第3个问题

git 回滚之前一个版本
git reset --hard HEAD^
再回到最新的版本:
当上传到远程库的时候:再拉下来就好了
git pull origin yangyanmeng
一个链接

20201214周一

1、基础知识

回掉函数

thrift协议

20201216 周三

基于NIO底层通信

server
processor
protocol json格式,序列化反序列化
transport TCP,HTTP等
一个链接
另一个链接
THRIFT RPC的一个简单C++ DEMO

Thrift是一种开源的跨语言的RPC服务框架,最初由facebook公司开发的,在2007年facebook将其提交apache基金会开源了。对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性。

Thrift代码包(位于thrift-0.6.1/lib/cpp/src)有以下几个目录:

concurrency:并发和时钟管理方面的库

processor:Processor相关类

protocal:Protocal相关类

transport:transport相关类

server:server相关类

Transport类(how is transmitted?)

负责数据传输,有以下几个可用类:

TFileTransport:文件(日志)传输类,允许client将文件传给server,允许server将收到的数据写到文件中。

THttpTransport:采用Http传输协议进行数据传输

TSocket:采用TCP Socket进行数据传输

TZlibTransport:压缩后对数据进行传输,或者将收到的数据解压

下面几个类主要是对上面几个类地装饰(采用了装饰模式),以提高传输效率。

TBufferedTransport:对某个Transport对象操作的数据进行buffer,即从buffer中读取数据进行传输,或者将数据直接写入buffer

TFramedTransport:同TBufferedTransport类似,也会对相关数据进行buffer,同时,它支持定长数据发送和接收。

TMemoryBuffer:从一个缓冲区中读写数据

Protocol类(what is transmitted?)
负责数据编码,主要有以下几个可用类:

TBinaryProtocol:二进制编码

TJSONProtocol:JSON编码

TCompactProtocol:密集二进制编码

TDebugProtocol:以用户易读的方式组织数据

Server类(providing service for clients)

TSimpleServer:简单的单线程服务器,主要用于测试

TThreadPoolServer:使用标准阻塞式IO的多线程服务器

TNonblockingServer:使用非阻塞式IO的多线程服务器,TFramedTransport必须使用该类型的server

安装boost库

一个链接
另外一个可用
使用brew install boost 命令

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.zshrc

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"


编写测试例子
#include <boost/regex.hpp>
#include<boost/lexical_cast.hpp>
#include <iostream>
#include <string>
 
int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
 
    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}

编译:
c++ -I /usr/local/opt/icu4c/include test1.cpp -o test1 -L /usr/local/opt/icu4c/lib -lboost_regex

demo

编译生成server
g++ -g -std=c++11 -Ithrift Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -o server -lthrift

实例参考
生成的6个文件中:
编译 ThriftDemo 项目,编译后会在工程目录下生成 gen-cpp 目录,该目录包含的文件如下。其中 ICale.h 和 ICale.cpp 是接口的实现文件,其中实现了RPC。ICalc_types.h、ICalc_types.cpp、 ICalc_constants.h、ICalc_constants.cpp 四个文件实现了接口中定义的类型和常量。ICale_server.skeleton.cpp是服务器框架代码,实际开发中可以直接使用这个文件实现服务器业务逻辑。
thrift框架
一个视频链接

12.24周四thrift

IDL语言写一个thrift文件,
然后执行:thrift —gen cpp serv.thrift
生成一些文件;

在Serv.h文件中
提供interface,(If,有纯虚函数需要实现,)

class ServIf {
 public:
  virtual ~ServIf() {}
  virtual void put(const Student& s) = 0;
  virtual int32_t icall(const Student& s) = 0;
  virtual void scall(std::string& _return, const Student& s) = 0;
  virtual void stcall(Student& _return, const Student& s) = 0;
};

在服务器模版文件Serv_server.skeleton.cpp
有handle类要继承ServIf这个类并重载实现虚函数

class ServHandler : virtual public ServIf {
 void put(const Student& s) {
                        // Your implementation goes here
                        printf("put\n");
                        printf("sno=%d sname=%s ssex=%d sage=%d\n", s.sno, s.sname.c_str(), s.ssex, s.sage);
                }

Serv.h文件中有Processor,依赖我们在Serv_server.skeleton.cpp 文件中重载的ServIf的方法,就是ServHandler
515 class ServProcessor : public ::apache::thrift::TDispatchProcessor {

3、在服务器模版文件中的逻辑代码:Serv_server.skeleton.cpp文件的main函数中:创建一个ServHandler,创建一个Processor
然后再把这个Handler传递给Processor

Processor是thrift帮我们实现的,存在于serv.h文件中
Handler需要我们自己重载,存在于Serv_server.skeleton.cpp文件中,

Thrift的Protocal序列化反序列化用json协议打包
transPort Wrapper 对外发出起使用HTTp
Low-level transport:使用TLS

然后客户端代码client.cpp
ServClient client(protocol); // 定义客户端
使用server端在客户端的代理new一个客户端,这个代理stub做的事情就是把请求打包发送给server,然后等待return,

组件化
protocal打包/解析数据的

虚拟的工厂方法,每次都让用户自己传进来相应的对象,避免了多个用户传进来许多只有自己有用,其他用户无用的方法,
Json解析性能低
probobuf折衷方案
flatbuffer损失一些带宽,但是解析性能比较高,

Epoll 惊群问题
ngnix解决方案:
设置resure_port选项

3、

NIO底层原理

4、周五20210108

编译修复warning
错误类型1:
C++: warning "will be initialized after [-Wreorder]
原因:类的构造函数中初始化顺序与成员变量顺序不一致

5、20210520

持久化连接、(一个tcp连接,可以多次http)
管线化连接(可以不等返回就发下一个请求,)

nohup ./bin/dolpn_api --log_dir ./log/ &
ps aux|grep dolphin
./bin/dolphin_api --log_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值