diff options
Diffstat (limited to 'weed/command/filer.go')
| -rw-r--r-- | weed/command/filer.go | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/weed/command/filer.go b/weed/command/filer.go index b188dabae..316fb115b 100644 --- a/weed/command/filer.go +++ b/weed/command/filer.go @@ -9,6 +9,10 @@ import ( "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/server" "github.com/chrislusf/seaweedfs/weed/util" + "github.com/soheilhy/cmux" + "google.golang.org/grpc/reflection" + "github.com/chrislusf/seaweedfs/weed/filer" + "google.golang.org/grpc" ) var ( @@ -99,7 +103,7 @@ func (fo *FilerOptions) start() { publicVolumeMux = http.NewServeMux() } - _, nfs_err := weed_server.NewFilerServer(defaultMux, publicVolumeMux, + fs, nfs_err := weed_server.NewFilerServer(defaultMux, publicVolumeMux, *fo.ip, *fo.port, *fo.master, *fo.dir, *fo.collection, *fo.defaultReplicaPlacement, *fo.redirectOnRead, *fo.disableDirListing, *fo.confFile, @@ -134,7 +138,22 @@ func (fo *FilerOptions) start() { if e != nil { glog.Fatalf("Filer listener error: %v", e) } - if e := http.Serve(filerListener, defaultMux); e != nil { + + m := cmux.New(filerListener) + grpcL := m.Match(cmux.HTTP2HeaderField("content-type", "application/grpc")) + httpL := m.Match(cmux.Any()) + + // Create your protocol servers. + grpcS := grpc.NewServer() + filer.RegisterSeaweedFilerServer(grpcS, fs) + reflection.Register(grpcS) + + httpS := &http.Server{Handler: defaultMux} + + go grpcS.Serve(grpcL) + go httpS.Serve(httpL) + + if err := m.Serve(); err != nil { glog.Fatalf("Filer Fail to serve: %v", e) } |
