diff --git a/config/websocket.go b/config/websocket.go index 21fe7afd..3c4fe3fe 100644 --- a/config/websocket.go +++ b/config/websocket.go @@ -33,6 +33,10 @@ type Websocket struct { // MaxMessageSize max message size allowed from connection // Default value is 1024 MaxMessageSize int64 + // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text + // see https://github.com/kataras/iris/issues/387#issuecomment-243006022 for more + // defaults to false + BinaryMessages bool // Endpoint is the path which the websocket server will listen for clients/connections // Default value is empty string, if you don't set it the Websocket server is disabled. Endpoint string @@ -52,6 +56,7 @@ func DefaultWebsocket() *Websocket { PongTimeout: DefaultPongTimeout, PingPeriod: DefaultPingPeriod, MaxMessageSize: DefaultMaxMessageSize, + BinaryMessages: false, ReadBufferSize: 4096, WriteBufferSize: 4096, Headers: make(map[string]string, 0), diff --git a/websocket.go b/websocket.go index a6590321..a41fc4ed 100644 --- a/websocket.go +++ b/websocket.go @@ -348,6 +348,7 @@ type ( websocketConnection struct { underline *websocket.Conn + messageType int id string send chan []byte onDisconnectListeners []WebsocketDisconnectFunc @@ -367,9 +368,10 @@ var _ WebsocketConnection = &websocketConnection{} func newWebsocketConnection(websocketConn *websocket.Conn, s *websocketServer) *websocketConnection { c := &websocketConnection{ - id: utils.RandomString(64), - underline: websocketConn, - send: make(chan []byte, 256), + id: utils.RandomString(64), + messageType: websocket.TextMessage, + underline: websocketConn, + send: make(chan []byte, 256), onDisconnectListeners: make([]WebsocketDisconnectFunc, 0), onErrorListeners: make([]WebsocketErrorFunc, 0), onNativeMessageListeners: make([]WebsocketNativeMessageFunc, 0), @@ -377,6 +379,11 @@ func newWebsocketConnection(websocketConn *websocket.Conn, s *websocketServer) * websocketServer: s, } + // set the messageType to binary if configuration says to + if s.config.BinaryMessages { + c.messageType = websocket.BinaryMessage + } + c.self = newWebsocketEmmiter(c, c.id) c.broadcast = newWebsocketEmmiter(c, NotMe) c.all = newWebsocketEmmiter(c, All) @@ -420,7 +427,8 @@ func (c *websocketConnection) writer() { } c.underline.SetWriteDeadline(time.Now().Add(c.websocketServer.config.WriteTimeout)) - res, err := c.underline.NextWriter(websocket.TextMessage) + + res, err := c.underline.NextWriter(c.messageType) if err != nil { return } @@ -435,10 +443,6 @@ func (c *websocketConnection) writer() { return } - // if err := c.write(websocket.TextMessage, msg); err != nil { - // return - // } - case <-ticker.C: if err := c.write(websocket.PingMessage, []byte{}); err != nil { return