mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
MM-33893: Disable TCP_NO_DELAY for websocket connections (#17129)
* MM-33893: Disable TCP_NO_DELAY for websocket connections In very large installations, websocket messages cause too much traffic congestion by sending too small packets and thereby cause a drop in throughput. To counter this, we disable the TCP_NO_DELAY flag for websocket connections. This has shown to give noticeable improvements in load tests. We wrap this in a feature flag for now to let it soak in Community first. ```release-note NONE ``` https://mattermost.atlassian.net/browse/MM-33893 * fix gorilla specific conn
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
@@ -61,6 +62,17 @@ func (a *App) NewWebConn(ws *websocket.Conn, session model.Session, t i18n.Trans
|
||||
})
|
||||
}
|
||||
|
||||
if a.srv.Config().FeatureFlags.WebSocketDelay {
|
||||
// Disable TCP_NO_DELAY for higher throughput
|
||||
tcpConn, ok := ws.UnderlyingConn().(*net.TCPConn)
|
||||
if ok {
|
||||
err := tcpConn.SetNoDelay(false)
|
||||
if err != nil {
|
||||
mlog.Warn("Error in setting NoDelay socket opts", mlog.Err(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wc := &WebConn{
|
||||
App: a,
|
||||
send: make(chan model.WebSocketMessage, sendQueueSize),
|
||||
|
||||
@@ -23,6 +23,8 @@ type FeatureFlags struct {
|
||||
PluginIncidentManagement string `plugin_id:"com.mattermost.plugin-incident-management"`
|
||||
// Toggle on and off support for Files search
|
||||
FilesSearch bool
|
||||
// Feature flag to control setting the TCP_NO_DELAY setting for websockets.
|
||||
WebSocketDelay bool
|
||||
}
|
||||
|
||||
func (f *FeatureFlags) SetDefaults() {
|
||||
@@ -32,6 +34,7 @@ func (f *FeatureFlags) SetDefaults() {
|
||||
f.CollapsedThreads = false
|
||||
f.FilesSearch = false
|
||||
f.PluginIncidentManagement = "1.6.0"
|
||||
f.WebSocketDelay = false
|
||||
}
|
||||
|
||||
func (f *FeatureFlags) Plugins() map[string]string {
|
||||
|
||||
Reference in New Issue
Block a user