Merge branch 'master' into disable-warn-log

This commit is contained in:
ben-toogood 2020-04-06 12:51:47 +01:00 committed by GitHub
commit cca9773269
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 73 additions and 45 deletions

View File

@ -135,27 +135,38 @@ func serveWebsocket(ctx context.Context, w http.ResponseWriter, r *http.Request,
// receive from stream and send to client
for {
// read backend response body
buf, err := rsp.Read()
if err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
select {
case <-ctx.Done():
return
}
case <-stream.Context().Done():
return
default:
// read backend response body
buf, err := rsp.Read()
if err != nil {
// wants to avoid import grpc/status.Status
if strings.Contains(err.Error(), "context canceled") {
return
}
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
return
}
// write the response
if err := wsutil.WriteServerMessage(rw, op, buf); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
// write the response
if err := wsutil.WriteServerMessage(rw, op, buf); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
return
}
return
}
if err = rw.Flush(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
if err = rw.Flush(); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
return
}
return
}
}
}
@ -166,30 +177,40 @@ func writeLoop(rw io.ReadWriter, stream client.Stream) {
defer stream.Close()
for {
buf, op, err := wsutil.ReadClientData(rw)
if err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
select {
case <-stream.Context().Done():
return
}
switch op {
default:
// not relevant
continue
case ws.OpText, ws.OpBinary:
break
}
// send to backend
// default to trying json
// if the extracted payload isn't empty lets use it
request := &raw.Frame{Data: buf}
if err := stream.Send(request); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
buf, op, err := wsutil.ReadClientData(rw)
if err != nil {
if wserr, ok := err.(wsutil.ClosedError); ok {
switch wserr.Code {
case ws.StatusNormalClosure, ws.StatusNoStatusRcvd:
return
}
}
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
return
}
switch op {
default:
// not relevant
continue
case ws.OpText, ws.OpBinary:
break
}
// send to backend
// default to trying json
// if the extracted payload isn't empty lets use it
request := &raw.Frame{Data: buf}
if err := stream.Send(request); err != nil {
if logger.V(logger.ErrorLevel, logger.DefaultLogger) {
logger.Error(err)
}
return
}
return
}
}
}

View File

@ -11,6 +11,7 @@ import (
"github.com/micro/go-micro/v2/registry"
)
//Options for web
type Options struct {
Name string
Version string
@ -67,7 +68,9 @@ func newOptions(opts ...Option) Options {
for _, o := range opts {
o(&opt)
}
if opt.Registry == nil {
opt.Registry = registry.DefaultRegistry
}
if opt.RegisterCheck == nil {
opt.RegisterCheck = DefaultRegisterCheck
}
@ -75,7 +78,7 @@ func newOptions(opts ...Option) Options {
return opt
}
// Server name
// Name of Web
func Name(n string) Option {
return func(o *Options) {
o.Name = n
@ -92,7 +95,7 @@ func Icon(ico string) Option {
}
}
// Unique server id
//Id for Unique server id
func Id(id string) Option {
return func(o *Options) {
o.Id = id
@ -120,7 +123,7 @@ func Address(a string) Option {
}
}
// The address to advertise for discovery - host:port
//Advertise The address to advertise for discovery - host:port
func Advertise(a string) Option {
return func(o *Options) {
o.Advertise = a
@ -143,26 +146,28 @@ func Registry(r registry.Registry) Option {
}
}
// Register the service with a TTL
//RegisterTTL Register the service with a TTL
func RegisterTTL(t time.Duration) Option {
return func(o *Options) {
o.RegisterTTL = t
}
}
// Register the service with at interval
//RegisterInterval Register the service with at interval
func RegisterInterval(t time.Duration) Option {
return func(o *Options) {
o.RegisterInterval = t
}
}
//Handler for custom handler
func Handler(h http.Handler) Option {
return func(o *Options) {
o.Handler = h
}
}
//Server for custom Server
func Server(srv *http.Server) Option {
return func(o *Options) {
o.Server = srv

View File

@ -268,7 +268,7 @@ func (s *service) stop() error {
func (s *service) Client() *http.Client {
rt := mhttp.NewRoundTripper(
mhttp.WithRegistry(registry.DefaultRegistry),
mhttp.WithRegistry(s.opts.Registry),
)
return &http.Client{
Transport: rt,

View File

@ -20,8 +20,10 @@ type Service interface {
Run() error
}
//Option for web
type Option func(o *Options)
//Web basic Defaults
var (
// For serving
DefaultName = "go-web"