Compare commits

...

5 Commits

Author SHA1 Message Date
yhy
0e7240462d erase warn 2025-02-07 15:42:38 +08:00
yhy
15cb2c14c0 fix buffer size , logger modify 2025-02-07 15:35:03 +08:00
yhy
ee00551116 absl mod 2025-02-05 20:58:32 +08:00
yhy
93e0d41276 remove pb.h pb.cc 2025-02-05 20:55:33 +08:00
yhy
c180cb9400 remove pb.h pb.cc 2025-02-05 20:54:35 +08:00
15 changed files with 122 additions and 2867 deletions

6
.gitignore vendored
View File

@ -1,8 +1,8 @@
tinypb.pb.cc
tinypb.pb.h
bin/ bin/
build/ build/
lib/ lib/
protobuf/ protobuf/
third_party/ # third_party/
*.pb.cc
*.pb.h

View File

@ -106,4 +106,5 @@ add_executable(test_tinyrpc
${TEST_SRC_LIST} ${TEST_SRC_LIST}
) )
target_link_libraries(test_tinyrpc PRIVATE tinyrpc) target_link_libraries(test_tinyrpc PRIVATE tinyrpc)

View File

@ -4,17 +4,37 @@
// #define LOGGER (std::cout << __FILE__ << ":" << __LINE__) // #define LOGGER (std::cout << __FILE__ << ":" << __LINE__)
struct logger { struct Logger {
logger() = default; Logger() = default;
template<typename T> template <typename T>
std::ostream& operator << (T&& msg) { std::ostream& operator<<(T&& msg)
{
return std::cout << msg; return std::cout << msg;
} }
~logger() { ~Logger()
{
std::cout << std::endl; std::cout << std::endl;
} }
}; };
#define logger() (logger() << __FILE__ << ":" << __LINE__ << " ") struct IgnoreLogger {
IgnoreLogger() = default;
template <typename T>
IgnoreLogger& operator<<(T&& msg)
{
return *this;
}
~IgnoreLogger() = default;
};
#define logger() (Logger() << __FILE__ << ":" << __LINE__ << " ")
// #define logger1() (Logger() << __FILE__ << ":" << __LINE__ << " ")

View File

@ -11,6 +11,7 @@
namespace tinyrpc { namespace tinyrpc {
class FdEvent; class FdEvent;
class Coroutine;
class Reactor { class Reactor {
public: public:
@ -26,6 +27,7 @@ namespace tinyrpc {
void addFdEvent(FdEvent* fdEvent); void addFdEvent(FdEvent* fdEvent);
void delFdEvent(FdEvent* fdEvent); void delFdEvent(FdEvent* fdEvent);
void modFdEvent(FdEvent* fdEvent); void modFdEvent(FdEvent* fdEvent);
void addCoroutine(Coroutine& cor);
void stop(); void stop();
void rouse(); void rouse();
void addTask(Task task, bool needRouse = false); void addTask(Task task, bool needRouse = false);

View File

@ -1,5 +1,4 @@
#pragma once #pragma once
#include "logger.hpp"
#include <cstddef> #include <cstddef>
#include <cstring> #include <cstring>
#include <vector> #include <vector>
@ -17,8 +16,7 @@ namespace tinyrpc {
} }
void reserved(std::size_t spaceSize) { // 预留空间 void reserved(std::size_t spaceSize) { // 预留空间
if(getWriteable() <= spaceSize) { if(getWriteable() <= spaceSize) {
resize((getReadable() + spaceSize) * 1.5);
resize((getReadable() + spaceSize) * 2);
} }
} }

View File

@ -2,10 +2,8 @@
#include "abstract_coder.hpp" #include "abstract_coder.hpp"
#include "client_tcp_connect.hpp" #include "client_tcp_connect.hpp"
#include "coroutine.hpp"
#include "net_address.hpp" #include "net_address.hpp"
#include "reactor.hpp" #include "reactor.hpp"
#include "tinypb_data.hpp"
#include <memory> #include <memory>
namespace tinyrpc { namespace tinyrpc {
@ -17,9 +15,9 @@ namespace tinyrpc {
const NetAddress& getPeerAddr() const {return m_peer_addr;} const NetAddress& getPeerAddr() const {return m_peer_addr;}
bool writeToSendBuffer(const AbstractData& data); bool writeToSendBuffer(const AbstractData& data);
int sendAndRecvData(const std::string& msg_req, std::shared_ptr<AbstractData>& res); int sendAndRecvData(const std::string& msg_req, std::shared_ptr<AbstractData>& res);
void addCoroutine(Coroutine& cor); // void addCoroutine(Coroutine& cor);
bool connectToServer(); bool connectToServer();
void start(); // void start();
~TcpClient(); ~TcpClient();
private: private:
int m_fd{-1}; int m_fd{-1};

View File

@ -1,4 +1,5 @@
#include "reactor.hpp" #include "reactor.hpp"
#include "coroutine.hpp"
#include "fd_event.hpp" #include "fd_event.hpp"
#include "logger.hpp" #include "logger.hpp"
// #include "coroutine_hook.hpp" // #include "coroutine_hook.hpp"
@ -266,6 +267,14 @@ namespace tinyrpc {
rouse(); rouse();
} }
void Reactor::addCoroutine(Coroutine& cor) {
Reactor::Task task = [&cor] {
cor.resume();
};
addTask(task);
}
Reactor::~Reactor() Reactor::~Reactor()
{ {
m_is_stop = true; m_is_stop = true;

View File

@ -35,7 +35,7 @@ namespace tinyrpc {
} }
void AbstractTcpConnection::clearClient() { void AbstractTcpConnection::clearClient() {
logger() << "clearClient"; logger() << "clearClient:" << m_fdEvent->getFd();
m_state = State::Disconnected; m_state = State::Disconnected;
m_reactor.delFdEvent(m_fdEvent); m_reactor.delFdEvent(m_fdEvent);
m_fdEvent->reset(); m_fdEvent->reset();

View File

@ -15,6 +15,7 @@ namespace tinyrpc {
m_buffer.swap(newBuffer); m_buffer.swap(newBuffer);
m_write_index -= m_read_index; m_write_index -= m_read_index;
m_read_index = 0; m_read_index = 0;
logger() << " adjustBuffer end size=" << m_buffer.size();
} }
@ -29,7 +30,7 @@ namespace tinyrpc {
if(getWriteable() < m_read_index) { if(getWriteable() < m_read_index) {
adjustBuffer(); adjustBuffer();
} }
logger() << " readOffset end size=" << m_buffer.size();
} }
void TcpBuffer::writeOffset(std::size_t offset) { void TcpBuffer::writeOffset(std::size_t offset) {
@ -43,6 +44,7 @@ namespace tinyrpc {
if(getWriteable() < m_read_index) { if(getWriteable() < m_read_index) {
adjustBuffer(); adjustBuffer();
} }
logger() << " writeOffset end size=" << m_buffer.size();
} }
@ -91,9 +93,10 @@ namespace tinyrpc {
std::vector<char> newBuffer(size); std::vector<char> newBuffer(size);
int cnt = std::min(size, getReadable()); int cnt = std::min(size, getReadable());
memcpy(newBuffer.data(), getReadAddress(), cnt); memcpy(newBuffer.data(), getReadAddress(), cnt);
m_buffer.swap(newBuffer);
m_write_index = cnt; m_write_index = cnt;
m_read_index = 0; m_read_index = 0;
logger() << " resize end"; // logger() << " resize end size=" << m_buffer.size();
} }
} }

View File

@ -30,8 +30,9 @@ namespace tinyrpc {
} }
TcpClient::~TcpClient() { TcpClient::~TcpClient() {
logger() << "~TcpClient";
m_reactor.delFdEvent(FdEventPool::getInstance()->getFdEvent(m_fd)); m_reactor.delFdEvent(FdEventPool::getInstance()->getFdEvent(m_fd));
if(m_fd != -1) close(m_fd); // if(m_fd != -1) close(m_fd);
delete m_coder; delete m_coder;
} }
bool TcpClient::connectToServer() { bool TcpClient::connectToServer() {
@ -74,15 +75,16 @@ namespace tinyrpc {
} }
void TcpClient::addCoroutine(Coroutine& cor) { // void TcpClient::addCoroutine(Coroutine& cor) {
Reactor::Task task = [&cor] {
cor.resume();
};
m_reactor.addTask(task); // Reactor::Task task = [&cor] {
} // cor.resume();
void TcpClient::start() { // };
Coroutine::getMainCoroutine(); // m_reactor.addTask(task);
m_reactor.loop(); // }
}
// void TcpClient::start() {
// Coroutine::getMainCoroutine();
// m_reactor.loop();
// }
} }

View File

@ -2,8 +2,6 @@
#include "logger.hpp" #include "logger.hpp"
#include "net_address.hpp" #include "net_address.hpp"
#include "reactor.hpp" #include "reactor.hpp"
#include "tcp_client.hpp"
#include "tcp_server.hpp"
#include "tinypb.pb.h" #include "tinypb.pb.h"
#include "tinypb_channel.hpp" #include "tinypb_channel.hpp"
#include "tinypb_closure.hpp" #include "tinypb_closure.hpp"
@ -12,12 +10,14 @@
using namespace std; using namespace std;
using namespace tinyrpc; using namespace tinyrpc;
int n = 10; int n = 100000;
void test() // TcpClient client(NetAddress("127.0.0.1", 9001));
{
NetAddress addr("127.0.0.1", 9001);
TinypbChannel channel(addr); void test1() {
TinypbChannel channel(NetAddress("127.0.0.1", 9001));
int n = 10;
while (n--) { while (n--) {
logger() << "============== test no:" << n << "==============="; logger() << "============== test no:" << n << "===============";
@ -55,12 +55,56 @@ void test()
} }
} }
void test()
{
TinypbChannel channel(NetAddress("127.0.0.1", 9001));
while (n--) {
logger() << "============== test no:" << n << "===============";
queryNameReq req_name;
req_name.set_req_no(20220315);
req_name.set_id(1100110001);
req_name.set_type(1);
queryNameRes res_name;
queryAgeReq req_age;
req_age.set_req_no(00001111);
req_age.set_id(6781);
queryAgeRes res_age;
TinypbClosure cb([]() {
logger() << "==========================";
logger() << "succ call rpc";
logger() << "==========================";
});
QueryService_Stub stub(&channel);
TinypbController rpc_controller;
stub.query_name(&rpc_controller, &req_name, &res_name, &cb);
if (rpc_controller.ErrorCode() != 0) {
logger() << "call rpc method query_name failed, errcode=" << rpc_controller.ErrorCode() << ",error=" << rpc_controller.ErrorText();
}
if (res_name.ret_code() != 0) {
logger() << "query name error, errcode=" << res_name.ret_code() << ", res_info=" << res_name.res_info();
} else {
logger() << "get res_name.age = " << res_name.name();
}
}
// test1();
}
int main() int main()
{ {
// TcpServer server;
TcpClient client(NetAddress("127.0.0.1", 9001));
Coroutine cor(test); Coroutine cor(test);
client.addCoroutine(cor);
client.start(); Reactor* reactor = Reactor::getReactor();
reactor->addCoroutine(cor);
reactor->loop();
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
#include "tcp_server.hpp" #include "tcp_server.hpp"
#include "tinypb.pb.h" #include "tinypb.pb.h"
#include <google/protobuf/service.h> #include <google/protobuf/service.h>
#include <iostream>
using namespace std; using namespace std;
using namespace tinyrpc; using namespace tinyrpc;
@ -25,7 +25,7 @@ public:
response->set_req_no(request->req_no()); response->set_req_no(request->req_no());
response->set_id(request->id()); response->set_id(request->id());
response->set_name("yyy"); response->set_name("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111y");
done->Run(); done->Run();
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1 +1 @@
Subproject commit d7aaad83b488fd62bd51c81ecf16cd938532cc0a Subproject commit f6ac87ae3250f4ad9c427f466fabecc704fd2781