Comments (2)
Control messages like PING are processed when reading a message. Ensure that the client reads all messages.
What's the difference/benefit of using ReadMessage/WriteMessage vs NextReader/NextWriter ?
NextReader and NextWriter are the core functionality ReadMessage is a helper method for getting a reader using NextReader and reading from that reader to a buffer. WriteMessage is a helper method for getting a writer using NextWriter, writing the message and closing the writer.
I don't know how am I supposed to use WriteControl in this context.
Because your application does not write control messages concurrently with calls to WriteMessage / NextWriter, there's no need to use WriteControl in your application.
Applications should write with a deadline to protect against peers that do not read from the socket.
from websocket.
Control messages like PING are processed when reading a message. Ensure that the client reads all messages.
What's the difference/benefit of using ReadMessage/WriteMessage vs NextReader/NextWriter ?
NextReader and NextWriter are the core functionality ReadMessage is a helper method for getting a reader using NextReader and reading from that reader to a buffer. WriteMessage is a helper method for getting a writer using NextWriter, writing the message and closing the writer.
I don't know how am I supposed to use WriteControl in this context.
Because your application does not write control messages concurrently with calls to WriteMessage / NextWriter, there's no need to use WriteControl in your application.
Applications should write with a deadline to protect against peers that do not read from the socket.
Hi @pennystevens,
Thanks for getting back to me to provide clarity on this.
- The main problem I have is if I remove the ping-pong algorithm, the chat app handle around 16 350 web sockets, then I get this error:
error:websocket: close 1006 (abnormal closure): unexpected EOF.
Is there a means so I can get more information on what's causing the issue?
I'm running the app in a docker desktop
container as well as the stress-test script that is replicated cause I can see that each instance breaks after connecting around 7500 web sockets (same on localhost), so I launch several instances... I see no resource issue both CPU or Memory. I think I'm far from the number of available sockets (about 64k I think), so I'm searching on some limits maybe to be setup through the Go Compiler: max number of Goroutines etc..I don't know.
- the second issue is that the server doesn't see any PONG message that should be sent by the stress test script despite the call to
conn.WriteMessage(websocket.PongMessage, []byte{})
when the stress test script tries to create a connection ...
func getWSConn(u *userdom.User, roomID string) (*websocket.Conn, error) {
conn, _, err := websocket.DefaultDialer.Dial("wss://localhost:8090/ws...", nil)
conn.SetPingHandler(func(data string) error {
println("RECEIVED PING") // OK
return conn.WriteMessage(websocket.PongMessage, []byte{})
})
return conn, err
}
... and the creation of the PONG handler in the app:
func createWS(w http.ResponseWriter, r *http.Request, pongHandler pongHandler) (*websocket.Conn, error) {
// ...
conn.SetPongHandler(pongHandler)
return conn, nil
}
// ...
// Respond to ping tick and reset the timer
func (c *WSClient) pongHandler(pongMsg string) error {
log.Print("PONG") // NOT REACHED
return c.wsconn.SetReadDeadline(time.Now().UTC().Add(pongWait))
}
Is there something I'm missing?
from websocket.
Related Issues (20)
- [ISSUE] Handling SIGINT and SIGTERM for Graceful Shutdown in Go Websocket App HOT 2
- [BUG] If `deadline` argument to `WriteControl` is `deadline.IsZero()` then 1000 hours (~41 days) are used as unexpected and undocumented fallback HOT 2
- [BUG] 不能删除超时的连接 HOT 1
- [QUESTION] Regarding pongWait Time in the Examples HOT 2
- [BUG] <SRV send msg to client and close the conn right no, client can't receive the msg> HOT 1
- Address CVE-2023-45288 HOT 1
- [FEATURE] Support Unix Domain Sockets HOT 4
- [BUG] FormatMessageType returns empty string for unknown type HOT 3
- [BUG] ssh: tcpChan: deadline not supported HOT 1
- [BUG] panic: concurrent write to websocket connection HOT 5
- [FEATURE] expose newConn function for custom Upgrader HOT 2
- [BUG] WebSocket server does not send 426 Upgrade Required
- [BUG] <title>panic: concurrent write to websocket connection HOT 4
- After connecting to websocket, the server prints the following log each time it receives a message: read/write on closed pipe. HOT 4
- Restore trust in the project HOT 18
- [BUG] go test @ 1.5.2 fails HOT 1
- [BUG] v1.5.2 checksum mismatch HOT 5
- [Question] Why are username and password not allowed in websocket URIs? HOT 2
- what's up with closing? HOT 2
- [BUG] panic: concurrent read to websocket connection bug HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from websocket.