Temporary websocket

This commit is contained in:
insanity@loafle.com 2017-06-27 19:53:05 +09:00
parent 1e3fc868a7
commit e351cb5c46
2 changed files with 111 additions and 1 deletions

View File

@ -3,16 +3,22 @@ package server
import ( import (
"flag" "flag"
pb "git.loafle.net/overflow/overflow_api_service/grpc" pb "git.loafle.net/overflow/overflow_api_service/grpc"
ws "git.loafle.net/overflow/overflow_api_service/ws"
"github.com/golang/glog" "github.com/golang/glog"
"github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/runtime"
"golang.org/x/net/context" "golang.org/x/net/context"
"google.golang.org/grpc" "google.golang.org/grpc"
"net/http" "net/http"
"strings" "strings"
"github.com/tmc/grpc-websocket-proxy/wsproxy"
"log"
"net"
) )
var ( var (
overflowEndpoint = flag.String("echo_endpoint", ":9090", "/v1/overflow/services") overflowEndpoint = flag.String("echo_endpoint", ":9090", "/v1/overflow/services")
grpcAddr = flag.String("grpcaddr", ":8001", "listen grpc addr")
httpAddr = flag.String("addr", ":8000", "listen http addr")
) )
func RunGwRpc() (err error) { func RunGwRpc() (err error) {
@ -20,16 +26,42 @@ func RunGwRpc() (err error) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if err := listenGRPC(*grpcAddr); err != nil {
return err
}
mux := runtime.NewServeMux() mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithInsecure()} opts := []grpc.DialOption{grpc.WithInsecure()}
err = pb.RegisterOverflowGatewayHandlerFromEndpoint(ctx, mux, *overflowEndpoint, opts) err = pb.RegisterOverflowGatewayHandlerFromEndpoint(ctx, mux, *overflowEndpoint, opts)
if err != nil {
return err
}
err = ws.RegisterWebSocketServiceHandlerFromEndpoint(ctx, mux, *grpcAddr, opts)
if err != nil { if err != nil {
return err return err
} }
http.ListenAndServe(*httpAddr, wsproxy.WebsocketProxy(mux))
return http.ListenAndServe(":8080", wsproxy.WebsocketProxy(allowCORS(mux)))
}
func listenGRPC(listenAddr string) error {
lis, err := net.Listen("tcp", listenAddr)
if err != nil {
return err
}
grpcServer := grpc.NewServer()
ws.RegisterWebSocketServiceServer(grpcServer, &Server{})
go func() {
if err := grpcServer.Serve(lis); err != nil {
log.Println("serveGRPC err:", err)
}
}()
return nil
return http.ListenAndServe(":8080", allowCORS(mux))
} }
//https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/main.go //https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/main.go

78
server/ws_server.go Normal file
View File

@ -0,0 +1,78 @@
package server
import (
ws "git.loafle.net/overflow/overflow_api_service/ws"
"log"
)
type Server struct{}
func (s *Server) Test(srv ws.WebSocketService_TestServer) error {
for {
req, err := srv.Recv()
if err != nil {
return err
}
if req.GetMsgType() == "onConnection" {
onConnection(req)
}
if err := srv.Send(&ws.WSResponse{
Msg: req.Msg + "!",
}); err != nil {
return err
}
}
}
func onConnection(req *ws.WSRequest) {
log.Println("UserID: ", req.GetUserId())
}
//
//func (s *Server) Stream(_ *echoserver.Empty, stream echoserver.EchoService_StreamServer) error {
// start := time.Now()
// for i := 0; i < 5; i++ {
// time.Sleep(time.Second)
// if err := stream.Send(&echoserver.EchoResponse{
// Message: "hello there!" + fmt.Sprint(time.Now().Sub(start)),
// }); err != nil {
// return err
// }
// }
// return nil
//}
//
//
//func (s *Server) Heartbeats(srv echoserver.EchoService_HeartbeatsServer) error {
// go func() {
// for {
// _, err := srv.Recv()
// if err != nil {
// log.Println("Recv() err:", err)
// return
// }
// log.Println("got hb from client")
// }
// }()
// t := time.NewTicker(time.Second * 1)
// for {
// log.Println("sending hb")
// hb := &echoserver.Heartbeat{
// Status: echoserver.Heartbeat_OK,
// }
// b := new(bytes.Buffer)
// if err := (&jsonpb.Marshaler{}).Marshal(b, hb); err != nil {
// log.Println("marshal err:", err)
// }
// log.Println(string(b.Bytes()))
// if err := srv.Send(hb); err != nil {
// return err
// }
// <-t.C
// }
// return nil
//}