// Run test suite using TCompactBinaryProtocol func TestTCompactProtocol(t *testing.T) { RunSocketTestSuite(t, thrift.NewTCompactProtocolFactory(), thrift.NewTTransportFactory()) RunSocketTestSuite(t, thrift.NewTCompactProtocolFactory(), thrift.NewTBufferedTransportFactory(8912)) RunSocketTestSuite(t, thrift.NewTCompactProtocolFactory(), thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())) }
func main() { flag.Usage = Usage var client bool var server bool var protocol string var framed bool var useHttp bool var help bool flag.BoolVar(&client, "client", false, "Run client") flag.BoolVar(&server, "server", false, "Run server") flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson)") flag.BoolVar(&framed, "framed", false, "Use framed transport") flag.BoolVar(&useHttp, "http", false, "Use http") flag.BoolVar(&help, "help", false, "See usage string") flag.Parse() if help || (client && server) || !(client || server) { fmt.Print("flag.NArg() == ", flag.NArg(), "\n") flag.Usage() } var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary", "": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: fmt.Fprint(os.Stderr, "Invalid protocol specified", protocol, "\n") Usage() os.Exit(1) } transportFactory := thrift.NewTTransportFactory() if framed { transportFactory = thrift.NewTFramedTransportFactory(transportFactory) } if client { RunClient(transportFactory, protocolFactory) } else if server { RunServer(transportFactory, protocolFactory) } else { flag.Usage() } os.Exit(0) }
func TestInitTwoServers(t *testing.T) { var err error protocolFactory := thrift.NewTBinaryProtocolFactoryDefault() transportFactory := thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) addr = FindAvailableTCPServerPort() serverTransport, err := thrift.NewTServerSocketTimeout(addr.String(), TIMEOUT) if err != nil { t.Fatal("Unable to create server socket", err) } server = thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) firstProcessor := multiplexedprotocoltest.NewFirstProcessor(&FirstImpl{}) processor.RegisterProcessor("FirstService", firstProcessor) secondProcessor := multiplexedprotocoltest.NewSecondProcessor(&SecondImpl{}) processor.RegisterProcessor("SecondService", secondProcessor) go server.Serve() }
func main() { flag.Parse() if *memprofile != "" { runtime.MemProfileRate = 100 } var ok bool if callType, ok = callTMap[*callName]; !ok { log.Fatal("Unknown service call", *callName) } if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } hostPort = fmt.Sprintf("%s:%d", *host, *port) var protocolFactory thrift.TProtocolFactory var transportFactory thrift.TTransportFactory if *compact { protocolFactory = thrift.NewTCompactProtocolFactory() } else { protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() } if *framed { transportFactory = thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) } else { transportFactory = thrift.NewTBufferedTransportFactory(8192) } if *runserver > 0 { serverTransport, err := thrift.NewTServerSocket(hostPort) if err != nil { log.Fatalf("Unable to create server socket: %s", err) } processor := stress.NewServiceProcessor(&handler{}) server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) if *clients == 0 { server.Serve() } else { go server.Serve() } } //start clients if *clients != 0 { ready.Add(*clients + 1) done.Add(*clients) for i := 0; i < *clients; i++ { go client(protocolFactory) } ready.Done() ready.Wait() //run! startTime := time.Now() //wait for completion done.Wait() endTime := time.Now() duration := endTime.Sub(startTime) log.Printf("%d calls in %v (%f calls per second)\n", clicounter, duration, float64(clicounter)/duration.Seconds()) } if *memprofile != "" { f, err := os.Create(*memprofile) if err != nil { log.Fatal(err) } pprof.WriteHeapProfile(f) f.Close() return } }
package main import ( "errors" "fmt" "os" "rpc" "thrift" ) var ( transportFactory = thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory()) protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() errUserOrPwdInvalid = errors.New("userid or password invalid") ) const ( remoteAddr = "192.168.1.241:8000" ) type rpcService struct { } func (rs *rpcService) FindAll(userid int64, password string, param map[string]string) (res []string, err error) { if userid != 1 || password != "123456" || len(param) == 0 { err = errUserOrPwdInvalid return } for k, v := range param {
func StartServer( host string, port int64, domain_socket string, transport string, protocol string, ssl bool, certPath string, handler thrifttest.ThriftTest) (srv *thrift.TSimpleServer, err error) { hostPort := fmt.Sprintf("%s:%d", host, port) var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: return nil, fmt.Errorf("Invalid protocol specified %s", protocol) } if debugServerProtocol { protocolFactory = thrift.NewTDebugProtocolFactory(protocolFactory, "server:") } var serverTransport thrift.TServerTransport if ssl { cfg := new(tls.Config) if cert, err := tls.LoadX509KeyPair(certPath+"/server.crt", certPath+"/server.key"); err != nil { return nil, err } else { cfg.Certificates = append(cfg.Certificates, cert) } serverTransport, err = thrift.NewTSSLServerSocket(hostPort, cfg) } else { if domain_socket != "" { serverTransport, err = thrift.NewTServerSocket(domain_socket) } else { serverTransport, err = thrift.NewTServerSocket(hostPort) } } if err != nil { return nil, err } var transportFactory thrift.TTransportFactory switch transport { case "http": return nil, fmt.Errorf("Http server transport is not supported") // trans, err = thrift.NewTHttpClient(fmt.Sprintf("http://%s/service", hostPort)) // if err != nil { // return nil, err // } case "framed": transportFactory = thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) case "buffered": transportFactory = thrift.NewTBufferedTransportFactory(8192) case "zlib": transportFactory = thrift.NewTZlibTransportFactory(zlib.BestCompression) case "": transportFactory = thrift.NewTTransportFactory() default: return nil, fmt.Errorf("Invalid transport specified %s", transport) } processor := thrifttest.NewThriftTestProcessor(handler) server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) if err = server.Listen(); err != nil { return } go server.AcceptLoop() return server, nil }
func GetServerParams( host string, port int64, domain_socket string, transport string, protocol string, ssl bool, certPath string, handler thrifttest.ThriftTest) (thrift.TProcessor, thrift.TServerTransport, thrift.TTransportFactory, thrift.TProtocolFactory, error) { var err error hostPort := fmt.Sprintf("%s:%d", host, port) var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: return nil, nil, nil, nil, fmt.Errorf("Invalid protocol specified %s", protocol) } if debugServerProtocol { protocolFactory = thrift.NewTDebugProtocolFactory(protocolFactory, "server:") } var serverTransport thrift.TServerTransport if ssl { cfg := new(tls.Config) if cert, err := tls.LoadX509KeyPair(certPath+"/server.crt", certPath+"/server.key"); err != nil { return nil, nil, nil, nil, err } else { cfg.Certificates = append(cfg.Certificates, cert) } serverTransport, err = thrift.NewTSSLServerSocket(hostPort, cfg) } else { if domain_socket != "" { serverTransport, err = thrift.NewTServerSocket(domain_socket) } else { serverTransport, err = thrift.NewTServerSocket(hostPort) } } if err != nil { return nil, nil, nil, nil, err } var transportFactory thrift.TTransportFactory switch transport { case "http": // there is no such factory, and we don't need any transportFactory = nil case "framed": transportFactory = thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) case "buffered": transportFactory = thrift.NewTBufferedTransportFactory(8192) case "zlib": transportFactory = thrift.NewTZlibTransportFactory(zlib.BestCompression) case "": transportFactory = thrift.NewTTransportFactory() default: return nil, nil, nil, nil, fmt.Errorf("Invalid transport specified %s", transport) } processor := thrifttest.NewThriftTestProcessor(handler) return processor, serverTransport, transportFactory, protocolFactory, nil }