Skip to content

Commit a687089

Browse files
committed
Coalesce outbound messages in chat example
1 parent 3ddc984 commit a687089

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

examples/chat/conn.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
package main
66

77
import (
8-
"github.com/gorilla/websocket"
8+
"bytes"
99
"log"
1010
"net/http"
1111
"time"
12+
13+
"github.com/gorilla/websocket"
1214
)
1315

1416
const (
@@ -25,6 +27,11 @@ const (
2527
maxMessageSize = 512
2628
)
2729

30+
var (
31+
newline = []byte{'\n'}
32+
space = []byte{' '}
33+
)
34+
2835
var upgrader = websocket.Upgrader{
2936
ReadBufferSize: 1024,
3037
WriteBufferSize: 1024,
@@ -56,6 +63,7 @@ func (c *Conn) readPump() {
5663
}
5764
break
5865
}
66+
message = bytes.TrimSpace(bytes.Replace(message, newline, space, -1))
5967
hub.broadcast <- message
6068
}
6169
}
@@ -77,10 +85,26 @@ func (c *Conn) writePump() {
7785
select {
7886
case message, ok := <-c.send:
7987
if !ok {
88+
// The hub closed the channel.
8089
c.write(websocket.CloseMessage, []byte{})
8190
return
8291
}
83-
if err := c.write(websocket.TextMessage, message); err != nil {
92+
93+
c.ws.SetWriteDeadline(time.Now().Add(writeWait))
94+
w, err := c.ws.NextWriter(websocket.TextMessage)
95+
if err != nil {
96+
return
97+
}
98+
w.Write(message)
99+
100+
// Add queued chat messages to the current websocket message.
101+
n := len(c.send)
102+
for i := 0; i < n; i++ {
103+
w.Write(newline)
104+
w.Write(<-c.send)
105+
}
106+
107+
if err := w.Close(); err != nil {
84108
return
85109
}
86110
case <-ticker.C:

examples/chat/home.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@
3636
appendLog($("<div><b>Connection closed.</b></div>"));
3737
};
3838
conn.onmessage = function (evt) {
39-
appendLog($("<div/>").text(evt.data));
39+
var messages = evt.data.split('\n')
40+
for (var i = 0; i < messages.length; i++) {
41+
appendLog($("<div/>").text(messages[i]));
42+
}
4043
};
4144
} else {
4245
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"));

0 commit comments

Comments
 (0)