Thrift 샘플 분석
4392 단어 프레임
Thrift 파일
namespace java calculator
//
enum Operator{
ADD,SUB,MUL,DIV
}
// ( )
exception InvalidationOperator{
1: i32 what,
2: string why
}
//
struct Work{
1: i32 num1,
2: i32 num2,
3: Operator op
}
//
service Calculator{
// : (num: ) throws (num: )
i32 calculate(1: Work work) throws (1:InvalidationOperator e)
}
서버 코드
Thrift 파일에 정의된 서비스 인터페이스를 구현합니다.
import calculator.Work;
import calculator.Calculator.Iface;
import calculator.InvalidationOperator;
class CalHandler implements Iface{
@Override
public int calculate(Work work) throws InvalidationOperator, TException {
switch(work.op){
case ADD:
return work.num1 + work.num2;
case SUB:
return work.num1 - work.num2;
case MUL:
return work.num1*work.num2;
case DIV:
if(work.num2 == 0){
throw new InvalidationOperator(work.op.getValue(), "0 !");
}
return work.num1/work.num2;
default:
throw new InvalidationOperator(work.op.getValue(), " !");
}
}
}
Iface의 정의는 다음과 같습니다.public interface Iface {
public int calculate(Work work) throws InvalidationOperator, org.apache.thrift.TException;
}
public interface AsyncIface {
public void calculate(Work work, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
}
서버 스니퍼 서비스 구현:public class CalServer {
public static void main(String[] args) throws TTransportException{
TServerTransport transport = new TServerSocket(9999);
CalHandler cal = new CalHandler();
Processor processor = new Processor(cal);
TServer server = new TSimpleServer(new Args(transport).processor(processor));
System.out.println(" ...");
server.serve();
}
}
Thrift의네트워크 스택은 다음과 같습니다.
+-------------------------------------------+
| Server |
| (single-threaded, event-driven etc) |
+-------------------------------------------+
| Processor |
| (compiler generated) |
+-------------------------------------------+
| Protocol |
| (JSON, compact etc) |
+-------------------------------------------+
| Transport |
| (raw TCP, HTTP etc) |
+-------------------------------------------+
public static class Processor {
public Processor(I iface) { }
protected Processor(I iface, Map processMap) { }
}
public static class AsyncProcessor {
public AsyncProcessor(I iface) { }
protected AsyncProcessor(I iface, Map processMap) { }
}
클라이언트 코드
public class CalClient {
public static void main(String[] args) throws InvalidationOperator, TException{
TTransport transport = new TSocket("localhost", 9999);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
Client client = new Client(protocol);
Work work = new Work(1,2,Operator.ADD);
int rst = client.calculate(work);
System.out.println(" :"+rst);
transport.close();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytest 테스트 프레임워크 기본 사용 방법 상세 정보pytest 소개 2. 매개 변수화를 지원하여 테스트할 테스트 용례를 세밀하게 제어할 수 있다. 3. 간단한 단원 테스트와 복잡한 기능 테스트를 지원할 수 있고selenium/appnium 등 자동화 테스트, 인터페...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.