用之前先画图
定义三个服务端,三个文件
再定义一个thrift 接口 用的是thrift语言,照着样例写就行
vim xx.thrift文件
mkdir match_system
mkdir game
namespace cpp match-service
struct User{
1: i32 id,
2: string name,
}
thrift -r –gen cpp tutorial.thrift // 通过一个接口生成一个c++版本的服务器
match_system
src
thrift -r –gen cpp ../../thirft/match.thrift
gen-cpp
h
h
mv gencpp/ match_sever
mv match_sever/Match-server.skeleton.cpp main.cpp
vim main.cpp
gg=G
先编译过在逐步添加模块 C++ 编译 链接,只编译.cpp文件头文件会自动引入
g++ -c main.cpp match_sever/*.cpp
有多少.cpp就有多少.o,下一步吧它们链接起来
g++ *.o -o main -lthirft 用到thrift的动态链接库 main文件名随便写
./main 运行
调试的时候可以用using namespace std;但是多人合作不要用会导致冲突
修改main.cpp重新编译再链接,只修改main.cpp 可以只编译它自己
输出不加endl,就不刷新标准输出所以看不到
ctro + c退出
持久化的时候只加源文件.h和.cpp , .o的不加
客户端
同样的操作生成一个py文件
里面有个可执行文件是用来实现服务器端
如果用客户端不需要可删可不删
操作还挺多的hh
首先建立仓库
创建服务端接口,照着thrift教程来写注意是.thrift文件
py文件注意缩进和:
利用thrift生成cpp文件 里面会有一个主函数cpp是服务端的模板
进去后先编译看能不能通过
然后再去修改,首先引入头文件注意修改引入的头文件注意<> 与”“区别
然后删除主函数中的样例只留开头与结尾
然后编写函数运行
cpp文件需要先编译再链接
g -c *.cpp
g *.o -o main -lthrift 动态引入链接库
保存到仓库的时候只加入.cpp文件和.h文件
服务端如果想用多线程,给每个函数分配一个线程
需要手写代码,去修改样例,改一下头文件,修改一下某个变量
还有share也是样例中的也要修改
接下里是客户端用的py
同样先生成py函数里面有一个可执行文件是服务端这里不需要,直接删除即可,
接下来先初步修改先编译
通过后在去修改
先引入包注意修改地址
再去删除main中的样例
最后加一句
if name == “main”:
main()
py里面要注意缩进
由于生产的函数每次都会新建一个链接,不用关闭,虽然服务端重新运行,这里都不用关
注意客户端调用服务函数,用文件名加函数名
可以引入读写加一个stdin即可
如果服务端想用多线程那就自己照着样例改一下
引入头文件,修改main函数,最后还再加个什么仓库,修改一下一些变量名
注意工程里面尽量不要有warning 有些是定义uint就写uint,如果写int会有警告
怎么求一个字符串的md5直接输入md5sum回车在输入字符串回车再输入ctro + d即可
这里只要求前八位
这里主要是服务端的逻辑
多线程
每秒匹配一次
没过一秒匹配阀值就会增大知道匹配为止。
还有一个端口的,要配置IP和端口
比如复制外面代码
先:set paste
复制
set: nopaste
gg=G
就可以
一般每个服务器监听只会开0~65535端口
某些会被系统占用
cmake是一个工具 把每次修改的cpp编译,一般可用g++替代
多线程不是多进程,一个进程可用开多个线程
这里的thrift程序是一个进程,里面可以开多线程
多线程可以用多核,如果只有一个核基本多线程就没啥用了,多线程会共享同一片内存空间,
两个用户同时打开客户端调用add函数会发生问题这个时候就要加锁
一般用thrift写多个微服务的时候需要自己手写多线程,其他的时候都是框架自己写好的