html页面
DOCTYPE html>
<html>
<head>
<title>abctitle>
head>
<body>
<script type="text/javascript">
var sock = null;
var wsuri = "ws://localhost:8080/a";
window.onload = function() {
sock = new WebSocket(wsuri);
sock.onopen = function() {
console.log(" 建立连接后触发 connected to " + wsuri);
}
sock.onclose = function(e) {
console.log("关闭连接时候触发 connection closed (" + e.code + ")");
}
sock.onmessage = function(e) {
console.log("收到消息后触发 message received: " + e.data);
}
sock.onerror=function (e) {
console.log("发生错误时候触发"+wsuri)
}
};
function send() {
var msg = document.getElementById('message').value;
sock.send(msg);
};
script>
<h1>GoWebSocketDemoh1>
<form>
<p>
Message: <input id="message" type="text" value="aa">
p>
form>
<button onclick="send();">给服务器发送消息button>
body>
html>
1. http包实现
package main
import (
"fmt"
"golang.org/x/net/websocket"
"log"
"net/http"
)
func main() {
http.Handle("/", websocket.Handler(Echo))
if err := http.ListenAndServe("127.0.0.1:9999", nil); err != nil {
log.Fatal(err)
}
}
func Echo(w *websocket.Conn) {
for {
var reply string
if err := websocket.Message.Receive(w, &reply); err != nil {
fmt.Println("err:", err)
break
}
msg := "get:" + reply
fmt.Println(msg)
if err := websocket.Message.Send(w, msg); err != nil {
fmt.Println("err:", err)
break
}
}
}
2.gin框架
package main
import (
"github.com/gin-gonic/gin"
"golang.org/x/net/websocket"
)
func websocketHandler(handler websocket.Handler) gin.HandlerFunc {
return func(context *gin.Context) {
if context.IsWebsocket() {
handler.ServeHTTP(context.Writer, context.Request)
} else {
context.JSON(200, gin.H{
"msg": "err",
})
context.Abort()
}
}
}
func websocketConn(conn *websocket.Conn) {
websocket.Message.Send(conn, "aaa")
}
func main() {
app := gin.Default()
app.GET("/ws", websocketHandler(websocketConn))
app.Run("80")
}