wangzhulei 7771384603 add bazel support | 2 jaren geleden | |
---|---|---|
benchmark | 3 jaren geleden | |
docs | 2 jaren geleden | |
src | 2 jaren geleden | |
test | 3 jaren geleden | |
third_party | 2 jaren geleden | |
tutorial | 2 jaren geleden | |
workflow @ bbcf8173be | 2 jaren geleden | |
.editorconfig | 3 jaren geleden | |
.gitignore | 2 jaren geleden | |
.gitmodules | 3 jaren geleden | |
.travis.yml | 3 jaren geleden | |
BUILD | 2 jaren geleden | |
CMakeLists.txt | 2 jaren geleden | |
CMakeLists_Headers.txt | 2 jaren geleden | |
CODE_OF_CONDUCT.md | 3 jaren geleden | |
GNUmakefile | 3 jaren geleden | |
LICENSE | 3 jaren geleden | |
README.md | 2 jaren geleden | |
README_cn.md | 2 jaren geleden | |
WORKSPACE | 2 jaren geleden | |
buildrpm.mk | 3 jaren geleden | |
configure | 3 jaren geleden | |
srpc-config.cmake.in | 3 jaren geleden | |
srpc.bzl | 2 jaren geleden |
srpc depends on Workflow and protobuf3.
For snappy and lz4, source codes are also included as third_party via git submodule.
git clone --recursive https://github.com/sogou/srpc.git
cd srpc
make
sudo make install
Easy to compile tutorial with these commands:
cd tutorial
make
syntax = "proto3";// You can use either proto2 or proto3. Both are supported by srpc
message EchoRequest {
string message = 1;
string name = 2;
};
message EchoResponse {
string message = 1;
};
service Example {
rpc Echo(EchoRequest) returns (EchoResponse);
};
protoc example.proto --cpp_out=./ --proto_path=./
srpc_generator protobuf ./example.proto ./
#include <stdio.h>
#include <signal.h>
#include "example.srpc.h"
using namespace srpc;
class ExampleServiceImpl : public Example::Service
{
public:
void Echo(EchoRequest *request, EchoResponse *response, RPCContext *ctx) override
{
response->set_message("Hi, " + request->name());
// gzip/zlib/snappy/lz4/none
// ctx->set_compress_type(RPCCompressGzip);
// protobuf/json
// ctx->set_data_type(RPCDataJson);
printf("get_req:\n%s\nset_resp:\n%s\n",
request->DebugString().c_str(), response->DebugString().c_str());
}
};
void sig_handler(int signo) { }
int main()
{
signal(SIGINT, sig_handler);
signal(SIGTERM, sig_handler);
SRPCServer server_tcp;
SRPCHttpServer server_http;
ExampleServiceImpl impl;
server_tcp.add_service(&impl);
server_http.add_service(&impl);
server_tcp.start(1412);
server_http.start(8811);
getchar(); // press "Enter" to end.
server_http.stop();
server_tcp.stop();
return 0;
}
#include <stdio.h>
#include "example.srpc.h"
using namespace srpc;
int main()
{
Example::SRPCClient client("127.0.0.1", 1412);
EchoRequest req;
req.set_message("Hello, srpc!");
req.set_name("workflow");
client.Echo(&req, [](EchoResponse *response, RPCContext *ctx) {
if (ctx->success())
printf("%s\n", response->DebugString().c_str());
else
printf("status[%d] error[%d] errmsg:%s\n",
ctx->get_status_code(), ctx->get_error(), ctx->get_errmsg());
});
getchar(); // press "Enter" to end.
return 0;
}
These compile commands are only for Linux system. On other system, complete cmake in tutorial is recommanded.
g++ -o server server.cc example.pb.cc -std=c++11 -lsrpc
g++ -o client client.cc example.pb.cc -std=c++11 -lsrpc
Terminal 1
./server
Terminal 2
./client
curl 127.0.0.1:8811/Example/Echo -H 'Content-Type: application/json' -d '{message:"from curl",name:"CURL"}'
Output of Terminal 1
get_req:
message: "Hello, srpc!"
name: "workflow"
set_resp:
message: "Hi, workflow"
get_req:
message: "from curl"
name: "CURL"
set_resp:
message: "Hi, CURL"
Output of Terminal 2
message: "Hi, workflow"
{"message":"Hi, CURL"}
Client = 1
ClientThread = 64, 128, 256, 512, 1024
RequestSize = 32
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Client = 1, 2, 4, 8, 16
ClientThread = 32
RequestSize = 32
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Client = 1
ClientThread = 1, 2, 4, 8, 16, 32, 64, 128, 256
RequestSize = 1024
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Client = 1
ClientThread = 100
RequestSize = 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Client = 1
ClientThread = 50
ClientQPS = 10000
RequestSize = 1024
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Outiler = 1%
Client = 32
ClientThread = 16
ClientQPS = 2500
RequestSize = 512
Duration = 20s
Server = 1
ServerIOThread = 16
ServerHandlerThread = 16
Outiler = 1%
618773193