add ntp
This commit is contained in:
parent
33e72857bf
commit
6c5797819e
74
src/newnius.com/client/client.go
Normal file
74
src/newnius.com/client/client.go
Normal file
@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
pb "newnius.com/ntp"
|
||||
"golang.org/x/net/context"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials"
|
||||
)
|
||||
|
||||
const (
|
||||
address = "ntp.newnius.com:8844"
|
||||
)
|
||||
|
||||
var delay time.Duration
|
||||
|
||||
func getTime() time.Time {
|
||||
return time.Now().Add(delay)
|
||||
}
|
||||
|
||||
func tick () {
|
||||
for {
|
||||
t := getTime()
|
||||
fmt.Printf("Current: %v/%v %02d:%02d:%02d\n", int(t.Month()), t.Day(), t.Hour(), t.Minute(), t.Second());
|
||||
time.Sleep(1000 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
func sync() {
|
||||
creds, err := credentials.NewClientTLSFromFile("server-cert.pem", "ntp.newnius.com")
|
||||
if err != nil {
|
||||
log.Fatalf("cert load error: %s", err)
|
||||
}
|
||||
|
||||
//conn, err := grpc.Dial(address, grpc.WithInsecure())
|
||||
conn, err := grpc.Dial(address, grpc.WithTransportCredentials(creds))
|
||||
if err != nil {
|
||||
log.Fatalf("unable to connect: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
var c pb.NtpClient
|
||||
|
||||
for {
|
||||
time.Sleep(5000 * time.Millisecond)
|
||||
c = pb.NewNtpClient(conn)
|
||||
start := time.Now().UnixNano()
|
||||
//time.Sleep(5000 * time.Millisecond)
|
||||
r, err := c.Query(context.Background(), &pb.NtpRequest{})
|
||||
//time.Sleep(5000 * time.Millisecond)
|
||||
if err != nil {
|
||||
fmt.Printf("WARNING: unable to sync: %v\n", err)
|
||||
continue
|
||||
}
|
||||
//fmt.Printf("Greeting: %v %s\n", i, r.Message)
|
||||
//current = t.Add(time.Since(start) / 2)
|
||||
//fmt.Println(r.Message)
|
||||
m := ( time.Now().UnixNano() - start ) / 2 ;// / int64(time.Millisecond);
|
||||
//fmt.Println(time.Duration(m))
|
||||
delay = time.Duration(r.Message - start - m)
|
||||
//fmt.Println(delay)
|
||||
fmt.Printf("RPC call cost %v\n", time.Duration(m * 2))
|
||||
//fmt.Printf("RPC call cost %v\n", time.Since(start))
|
||||
//fmt.Printf("call cost %v\n", int64(time.Since(start) / time.Microsecond))
|
||||
fmt.Println("DEBUG: synced")
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
go sync()
|
||||
tick()
|
||||
}
|
29
src/newnius.com/client/server-cert.pem
Normal file
29
src/newnius.com/client/server-cert.pem
Normal file
@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCjCCAvKgAwIBAgIJAIWzLYS8OHW6MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
|
||||
BAMMD250cC5uZXduaXVzLmNvbTAeFw0xNzEwMjEwNzM2NTRaFw0xODEwMjEwNzM2
|
||||
NTRaMBoxGDAWBgNVBAMMD250cC5uZXduaXVzLmNvbTCCAiIwDQYJKoZIhvcNAQEB
|
||||
BQADggIPADCCAgoCggIBAL8Zedi6flVGEwHLq645WiTqLznRTImBRmEg+yLOsyyx
|
||||
eLwAqJ+8lX9juIOX2QhDHltePegiHj9brFP2ClykHZEQjUdXHNsqEppUCz2Aozdg
|
||||
RhCI08gYq8AQFOFZx8hXHiZVS31zhQU9+lLKhwz/cJK2vGWTwwTgqBp3vlIHOUEg
|
||||
GMiatbBeEyK9w3TggYAhnONns0gBy/cQS0SJukIp6Ii/3h3AXXxoP1OUUn81mtkT
|
||||
VNdBPqeH87T43jJJtQyOM+qetpTJvcAmpRksuca6i57HwwCnnTgo5TL7V8BXugHv
|
||||
PLbyVLbNmaaX2AN5JqB9gz/67sSzsbVmgLl2nLoozAYuemWCO1rGBl/ked/+DPW5
|
||||
IbBtl+a6r7hWxMmEZgbJWS0RxUlhyAWqWCpzkyTomlw+TCkctHTyJCpCsWPbdtFK
|
||||
7E1fhEHdZn9NwmLuhAKgRcGGGSHYMhE8rsQOrwnTLS9N+YmdWe1n1Yav69/LDzkS
|
||||
+oA7rXI9feQfv2WVQBbbiza8iKg4ioUSV50/0OJboyBUC4TfEwD+Hr9Z5kh1g/mi
|
||||
W7i5821uvzm8aMtRnTir6NOqSkK2+BLBqoxC76FjsU2NOM4BvY6Ud2kV6JMIlXBv
|
||||
2GbrA9skIz/kSFnnFZDizO6b7AGSEPkPxhPhr8fsX05Vfk8pzTBZx2RKv63kKUFF
|
||||
AgMBAAGjUzBRMB0GA1UdDgQWBBRFl2xB7OAsxgAkVEFHzMhKLOTPAjAfBgNVHSME
|
||||
GDAWgBRFl2xB7OAsxgAkVEFHzMhKLOTPAjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
||||
SIb3DQEBCwUAA4ICAQBAFReyFUNFQUgb1ycfJFoPQ94VhtRunB3cl6Lg2Fukhfpn
|
||||
Yf7gj3r3v7daJcUY1TOddi/xaOAb70Y7V/JRPNpMq6FgZR8t+s2IbkcZcZ5JdmoF
|
||||
7MGXtj8G357SPLeEGsNDqfnWddvWDSXcH3OHONRL0ArVhFKff+KNIcimPgAQrDt0
|
||||
GkKe2W74//8wMkEbMIt6r+dozBV+NKgWM7SSRW7FKlyzT5og1MuRG9gbebVFli+I
|
||||
ABRHy3N4DJiyu8DtlQooLwC4aEBW0nUPzjYobIaoVvltAc88WMEDkvLyqc1H1Rbv
|
||||
OFIzA0jmGBDBE3ESbndEdUz4m7ekWO4+6dSWL5InRhDSWGlDgq1V22yocP6hmRvT
|
||||
stu4e79o4Y5+HVWEIqkpOCHKdye/CcevFt4Z9fYNMxHUEPYv655JE+ocIyEU53X8
|
||||
9FmFxt0ACp0eyx0y9MFD5mkw7FWVi7Lp1OjljDQelDNf2C6rsTH66a3Cgk3dnUgg
|
||||
9C+WrgYEKBkDODXZgtMaNBhgX/Py+l4CyODvhF6J/BFG/G+vRlU4Fan1g2C94RtQ
|
||||
dU2xEoao0g2d61Q5WoZ4RfJ7LHD+QXqOKrcEuLTk+eSY5nj16kZc12yM59zBmpip
|
||||
Cbr10Ix7ffoaADxUqpjiK+3q5pzWGQjapMVxU5ZUt0mFvI2p6UE0n18mW0q4tw==
|
||||
-----END CERTIFICATE-----
|
151
src/newnius.com/ntp/ntp.pb.go
Normal file
151
src/newnius.com/ntp/ntp.pb.go
Normal file
@ -0,0 +1,151 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// source: ntp.proto
|
||||
|
||||
/*
|
||||
Package ntp is a generated protocol buffer package.
|
||||
|
||||
It is generated from these files:
|
||||
ntp.proto
|
||||
|
||||
It has these top-level messages:
|
||||
NtpRequest
|
||||
NtpReply
|
||||
*/
|
||||
package ntp
|
||||
|
||||
import proto "github.com/golang/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
|
||||
import (
|
||||
context "golang.org/x/net/context"
|
||||
grpc "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
||||
|
||||
type NtpRequest struct {
|
||||
}
|
||||
|
||||
func (m *NtpRequest) Reset() { *m = NtpRequest{} }
|
||||
func (m *NtpRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*NtpRequest) ProtoMessage() {}
|
||||
func (*NtpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
||||
|
||||
type NtpReply struct {
|
||||
// string message = 1;
|
||||
Message int64 `protobuf:"varint,1,opt,name=message" json:"message,omitempty"`
|
||||
}
|
||||
|
||||
func (m *NtpReply) Reset() { *m = NtpReply{} }
|
||||
func (m *NtpReply) String() string { return proto.CompactTextString(m) }
|
||||
func (*NtpReply) ProtoMessage() {}
|
||||
func (*NtpReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
||||
|
||||
func (m *NtpReply) GetMessage() int64 {
|
||||
if m != nil {
|
||||
return m.Message
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*NtpRequest)(nil), "ntp.NtpRequest")
|
||||
proto.RegisterType((*NtpReply)(nil), "ntp.NtpReply")
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ context.Context
|
||||
var _ grpc.ClientConn
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
const _ = grpc.SupportPackageIsVersion4
|
||||
|
||||
// Client API for Ntp service
|
||||
|
||||
type NtpClient interface {
|
||||
Query(ctx context.Context, in *NtpRequest, opts ...grpc.CallOption) (*NtpReply, error)
|
||||
}
|
||||
|
||||
type ntpClient struct {
|
||||
cc *grpc.ClientConn
|
||||
}
|
||||
|
||||
func NewNtpClient(cc *grpc.ClientConn) NtpClient {
|
||||
return &ntpClient{cc}
|
||||
}
|
||||
|
||||
func (c *ntpClient) Query(ctx context.Context, in *NtpRequest, opts ...grpc.CallOption) (*NtpReply, error) {
|
||||
out := new(NtpReply)
|
||||
err := grpc.Invoke(ctx, "/ntp.Ntp/Query", in, out, c.cc, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Server API for Ntp service
|
||||
|
||||
type NtpServer interface {
|
||||
Query(context.Context, *NtpRequest) (*NtpReply, error)
|
||||
}
|
||||
|
||||
func RegisterNtpServer(s *grpc.Server, srv NtpServer) {
|
||||
s.RegisterService(&_Ntp_serviceDesc, srv)
|
||||
}
|
||||
|
||||
func _Ntp_Query_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(NtpRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(NtpServer).Query(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/ntp.Ntp/Query",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(NtpServer).Query(ctx, req.(*NtpRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _Ntp_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "ntp.Ntp",
|
||||
HandlerType: (*NtpServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "Query",
|
||||
Handler: _Ntp_Query_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "ntp.proto",
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("ntp.proto", fileDescriptor0) }
|
||||
|
||||
var fileDescriptor0 = []byte{
|
||||
// 142 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcc, 0x2b, 0x29, 0xd0,
|
||||
0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0xce, 0x2b, 0x29, 0x50, 0xe2, 0xe1, 0xe2, 0xf2, 0x2b,
|
||||
0x29, 0x08, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x51, 0x52, 0xe1, 0xe2, 0x00, 0xf3, 0x0a, 0x72,
|
||||
0x2a, 0x85, 0x24, 0xb8, 0xd8, 0x73, 0x53, 0x8b, 0x8b, 0x13, 0xd3, 0x53, 0x25, 0x18, 0x15, 0x18,
|
||||
0x35, 0x98, 0x83, 0x60, 0x5c, 0x23, 0x03, 0x2e, 0x66, 0xbf, 0x92, 0x02, 0x21, 0x4d, 0x2e, 0xd6,
|
||||
0xc0, 0xd2, 0xd4, 0xa2, 0x4a, 0x21, 0x7e, 0x3d, 0x90, 0xa1, 0x08, 0x63, 0xa4, 0x78, 0x11, 0x02,
|
||||
0x05, 0x39, 0x95, 0x4a, 0x0c, 0x4e, 0x22, 0x5c, 0x42, 0xc9, 0xf9, 0xb9, 0x7a, 0xc9, 0xf9, 0x39,
|
||||
0xf9, 0x49, 0xa5, 0x7a, 0x45, 0x05, 0xc9, 0x25, 0xa9, 0xc5, 0x25, 0x49, 0x6c, 0x60, 0x77, 0x18,
|
||||
0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x39, 0x97, 0x07, 0x94, 0x00, 0x00, 0x00,
|
||||
}
|
18
src/newnius.com/ntp/ntp.proto
Normal file
18
src/newnius.com/ntp/ntp.proto
Normal file
@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option java_package = "com.colobu.rpctest";
|
||||
|
||||
package ntp;
|
||||
|
||||
service Ntp {
|
||||
rpc Query (NtpRequest) returns (NtpReply) {}
|
||||
}
|
||||
|
||||
message NtpRequest {
|
||||
//string timezone = 1;
|
||||
}
|
||||
|
||||
message NtpReply {
|
||||
//string message = 1;
|
||||
int64 message = 1;
|
||||
}
|
29
src/newnius.com/server/server-cert.pem
Normal file
29
src/newnius.com/server/server-cert.pem
Normal file
@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCjCCAvKgAwIBAgIJAIWzLYS8OHW6MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
|
||||
BAMMD250cC5uZXduaXVzLmNvbTAeFw0xNzEwMjEwNzM2NTRaFw0xODEwMjEwNzM2
|
||||
NTRaMBoxGDAWBgNVBAMMD250cC5uZXduaXVzLmNvbTCCAiIwDQYJKoZIhvcNAQEB
|
||||
BQADggIPADCCAgoCggIBAL8Zedi6flVGEwHLq645WiTqLznRTImBRmEg+yLOsyyx
|
||||
eLwAqJ+8lX9juIOX2QhDHltePegiHj9brFP2ClykHZEQjUdXHNsqEppUCz2Aozdg
|
||||
RhCI08gYq8AQFOFZx8hXHiZVS31zhQU9+lLKhwz/cJK2vGWTwwTgqBp3vlIHOUEg
|
||||
GMiatbBeEyK9w3TggYAhnONns0gBy/cQS0SJukIp6Ii/3h3AXXxoP1OUUn81mtkT
|
||||
VNdBPqeH87T43jJJtQyOM+qetpTJvcAmpRksuca6i57HwwCnnTgo5TL7V8BXugHv
|
||||
PLbyVLbNmaaX2AN5JqB9gz/67sSzsbVmgLl2nLoozAYuemWCO1rGBl/ked/+DPW5
|
||||
IbBtl+a6r7hWxMmEZgbJWS0RxUlhyAWqWCpzkyTomlw+TCkctHTyJCpCsWPbdtFK
|
||||
7E1fhEHdZn9NwmLuhAKgRcGGGSHYMhE8rsQOrwnTLS9N+YmdWe1n1Yav69/LDzkS
|
||||
+oA7rXI9feQfv2WVQBbbiza8iKg4ioUSV50/0OJboyBUC4TfEwD+Hr9Z5kh1g/mi
|
||||
W7i5821uvzm8aMtRnTir6NOqSkK2+BLBqoxC76FjsU2NOM4BvY6Ud2kV6JMIlXBv
|
||||
2GbrA9skIz/kSFnnFZDizO6b7AGSEPkPxhPhr8fsX05Vfk8pzTBZx2RKv63kKUFF
|
||||
AgMBAAGjUzBRMB0GA1UdDgQWBBRFl2xB7OAsxgAkVEFHzMhKLOTPAjAfBgNVHSME
|
||||
GDAWgBRFl2xB7OAsxgAkVEFHzMhKLOTPAjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
||||
SIb3DQEBCwUAA4ICAQBAFReyFUNFQUgb1ycfJFoPQ94VhtRunB3cl6Lg2Fukhfpn
|
||||
Yf7gj3r3v7daJcUY1TOddi/xaOAb70Y7V/JRPNpMq6FgZR8t+s2IbkcZcZ5JdmoF
|
||||
7MGXtj8G357SPLeEGsNDqfnWddvWDSXcH3OHONRL0ArVhFKff+KNIcimPgAQrDt0
|
||||
GkKe2W74//8wMkEbMIt6r+dozBV+NKgWM7SSRW7FKlyzT5og1MuRG9gbebVFli+I
|
||||
ABRHy3N4DJiyu8DtlQooLwC4aEBW0nUPzjYobIaoVvltAc88WMEDkvLyqc1H1Rbv
|
||||
OFIzA0jmGBDBE3ESbndEdUz4m7ekWO4+6dSWL5InRhDSWGlDgq1V22yocP6hmRvT
|
||||
stu4e79o4Y5+HVWEIqkpOCHKdye/CcevFt4Z9fYNMxHUEPYv655JE+ocIyEU53X8
|
||||
9FmFxt0ACp0eyx0y9MFD5mkw7FWVi7Lp1OjljDQelDNf2C6rsTH66a3Cgk3dnUgg
|
||||
9C+WrgYEKBkDODXZgtMaNBhgX/Py+l4CyODvhF6J/BFG/G+vRlU4Fan1g2C94RtQ
|
||||
dU2xEoao0g2d61Q5WoZ4RfJ7LHD+QXqOKrcEuLTk+eSY5nj16kZc12yM59zBmpip
|
||||
Cbr10Ix7ffoaADxUqpjiK+3q5pzWGQjapMVxU5ZUt0mFvI2p6UE0n18mW0q4tw==
|
||||
-----END CERTIFICATE-----
|
52
src/newnius.com/server/server-key.pem
Normal file
52
src/newnius.com/server/server-key.pem
Normal file
@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
kXi0ZhYY/qI+4S8d3TosuUee/Wvwwe21
|
||||
-----END PRIVATE KEY-----
|
54
src/newnius.com/server/server.go
Normal file
54
src/newnius.com/server/server.go
Normal file
@ -0,0 +1,54 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
"time"
|
||||
"golang.org/x/net/context"
|
||||
"google.golang.org/grpc"
|
||||
pb "newnius.com/ntp"
|
||||
"google.golang.org/grpc/credentials"
|
||||
)
|
||||
|
||||
var (
|
||||
certFile = "server-cert.pem"
|
||||
keyFile = "server-key.pem"
|
||||
)
|
||||
|
||||
const (
|
||||
port = ":8844"
|
||||
)
|
||||
|
||||
type server struct{}
|
||||
|
||||
func (s *server) Query(ctx context.Context, in *pb.NtpRequest) (*pb.NtpReply, error) {
|
||||
//loc, err := time.LoadLocation(in.Timezone)
|
||||
//if err != nil {
|
||||
// zone, _ := time.Now().Zone()
|
||||
// loc, _ = time.LoadLocation(zone)
|
||||
//}
|
||||
//set timezone,
|
||||
//now := time.Now().In(loc)
|
||||
return &pb.NtpReply{Message: time.Now().UnixNano() + 100000000000}, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
creds, err := credentials.NewServerTLSFromFile(certFile, keyFile)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to setup tls: %v", err)
|
||||
}
|
||||
//log.Println(creds)
|
||||
lis, err := net.Listen("tcp", port)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to listen: %v", err)
|
||||
}
|
||||
s := grpc.NewServer(
|
||||
grpc.Creds(creds),
|
||||
)
|
||||
pb.RegisterNtpServer(s, &server{})
|
||||
//reflection.Register(s)
|
||||
//if err := s.Serve(lis); err != nil {
|
||||
// log.Fatal("failed to serve: %v", err)
|
||||
//}
|
||||
s.Serve(lis)
|
||||
}
|
BIN
src/rpc/client/client
Executable file
BIN
src/rpc/client/client
Executable file
Binary file not shown.
48
src/rpc/client/client.go
Normal file
48
src/rpc/client/client.go
Normal file
@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/rpc"
|
||||
"log"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Args struct {
|
||||
A, B int
|
||||
}
|
||||
|
||||
type Quotient struct {
|
||||
Quo, Rem int
|
||||
}
|
||||
|
||||
type Arith int
|
||||
|
||||
func (t *Arith) Multiply(args *Args, reply *int) error {
|
||||
*reply = args.A * args.B
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *Arith) Divide(args *Args, quo *Quotient) error {
|
||||
if args.B == 0 {
|
||||
return errors.New("divide by zero")
|
||||
}
|
||||
quo.Quo = args.A / args.B
|
||||
quo.Rem = args.A % args.B
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
serverAddress := "127.0.0.1"
|
||||
client, err := rpc.DialHTTP("udp", serverAddress + ":1234")
|
||||
if err != nil {
|
||||
log.Fatal("Fatal error:", err)
|
||||
}
|
||||
//args := &server.Args{7, 8}
|
||||
var args Args = Args{7, 8}
|
||||
var reply int
|
||||
err = client.Call("Arith.Multiply", args, &reply)
|
||||
if err != nil {
|
||||
log.Fatal("arith error:", err)
|
||||
}
|
||||
fmt.Printf("Arith: %d * %d = %d", args.A, args.B, reply)
|
||||
}
|
BIN
src/rpc/server/server
Executable file
BIN
src/rpc/server/server
Executable file
Binary file not shown.
44
src/rpc/server/server.go
Normal file
44
src/rpc/server/server.go
Normal file
@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/rpc"
|
||||
"net"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type Args struct {
|
||||
A, B int
|
||||
}
|
||||
|
||||
type Quotient struct {
|
||||
Quo, Rem int
|
||||
}
|
||||
|
||||
type Arith int
|
||||
|
||||
func (t *Arith) Multiply(args *Args, reply *int) error {
|
||||
*reply = args.A * args.B
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *Arith) Divide(args *Args, quo *Quotient) error {
|
||||
if args.B == 0 {
|
||||
return errors.New("divide by zero")
|
||||
}
|
||||
quo.Quo = args.A / args.B
|
||||
quo.Rem = args.A % args.B
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
arith := new(Arith)
|
||||
rpc.Register(arith)
|
||||
rpc.HandleHTTP()
|
||||
l, e := net.Listen("udp", ":1234")
|
||||
if e != nil {
|
||||
log.Fatal("Fatal error:", e)
|
||||
}
|
||||
http.Serve(l, nil)
|
||||
}
|
Loading…
Reference in New Issue
Block a user