есть код js клиента:
let socket = new WebSocket("wss://"+location.host+"/ws");
console.log("Attempting Connection...");
socket.onopen = () => {
console.log("Successfully Connected");
};
socket.onclose = event => {
console.log("Socket Closed Connection: ", event);
};
socket.onerror = error => {
console.log("Socket Error: ", error);
};
socket.onmessage = event => {
alert(event.data);
};
сервер go:
package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func handler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
ReadAndWrite(conn)
}
func ReadAndWrite(conn *websocket.Conn){
for {
messageType, msg, err := conn.ReadMessage()
stringMsg := string(msg)
fmt.Println("message:" , stringMsg)
if err != nil {
log.Println(err)
return
}
answerStringMsg := "your message is: "+stringMsg
answerByteMsg := []byte(answerStringMsg)
if err := conn.WriteMessage(messageType , answerByteMsg); err != nil {
log.Println(err)
return
}
}
}
func main() {
http.HandleFunc("/ws", handler)
http.ListenAndServe(":8080", nil)
}
Какую базу данных лучше использовать для сохранения сообщений?
Как лучше будет реализовать сообщения и диалоги?
Пока что я придумал 2 способа:
1 способ: отправлять сообщение определенному пользователю, добавлять сообщение в бд, а после перезагрузки просто восстановить старые сообщения из бд
2 способ: добавлять сообщение в бд и отправлять запрос другому пользователю, чтобы он обновил данные из бд и получил новое сообщение
Если у вас есть более продуманная реализация личных сообщений и диалогов, прошу поделиться ею в комментариях, также в использовании кода клиента допускается php