Solution 5: Working with TCP/IP and WebSocket
Explore creating TCP/IP, UDP, UNIX Domain Socket, and WebSocket servers and clients in Go. Learn how to upgrade HTTP connections to WebSocket and handle message transmission, enhancing your skills in network communication using Go.
We'll cover the following...
We'll cover the following...
Solution
Here is an example of a WebSocket server that creates a variable number of random integers that are sent to the client.
To run the client side, open a new terminal window and copy and paste the below commands:
The following playground contains server (ws.go) and client (client.go) code files:
package main
import (
"fmt"
"log"
"net/url"
"github.com/gorilla/websocket"
)
func main() {
u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/"}
conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("Error connecting to WebSocket:", err)
}
defer conn.Close()
// Send initial message to server
message := struct {
Count int `json:"count"`
}{Count: 10} // Request 10 random integers
err = conn.WriteJSON(&message)
if err != nil {
log.Fatal("Error sending initial message to WebSocket:", err)
}
fmt.Println("Requested 10 random numbers from the server")
fmt.Println("Received random integers:")
// Receive random integers from server
for i := 0; i < message.Count; i++ {
var integer int
err = conn.ReadJSON(&integer)
if err != nil {
log.Fatal("Error receiving random integer from WebSocket:", err)
}
fmt.Println(integer)
}
}
ws.go & client.go
Code explanation
Here is the code explanation for ws.go:
Line 11: The
upgrader...