Melody 是一个 Go 语言的微型 WebSocket 框架,基于 github.com/gorilla/websocket 开发.
Gin-Gonic
获取包:
1
| > go get github.com/gin-gonic/gin
|
添加引用:
1
| inport "github.com/gin-gonic/gin"
|
创建Gin测试站点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import ( "github.com/gin-gonic/gin" )
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) { c.String(200, "Hello Gin") })
r.Run(":8080") }
|
运行:
Melody
获取包:
1
| > go get gopkg.in/olahol/melody.v1
|
添加引用:
1
| import "gopkg.in/olahol/melody.v1"
|
Simple Chat Demo
main.go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package main
import ( "github.com/gin-gonic/gin" "gopkg.in/olahol/melody.v1" "net/http" )
func main() { r := gin.Default() m := melody.New()
r.GET("/", func(c *gin.Context) { http.ServeFile(c.Writer, c.Request, "templates/index.html") })
//websocket r.GET("/ws", func(c *gin.Context) { m.HandleRequest(c.Writer, c.Request) })
m.HandleMessage(func(s *melody.Session, msg []byte) { m.Broadcast(msg) })
r.Run(":8080") }
|
index.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <html> <head> <meta charset="UTF-8"> <title>WebSocket</title> <style> #chat { text-align: left; background: #f1f1f1; width: 500px; min-height: 300px; padding: 20px; } </style> </head> <body> <center> <h3>Chat</h3> <pre id="chat"></pre> <input placeholder="say something" id="text" type="text"> </center>
<script> var url = "ws://" + window.location.host + "/ws"; var ws = new WebSocket(url);
var name = "Guest" + Math.floor(Math.random() * 1000);
var chat = document.getElementById("chat"); var text = document.getElementById("text");
var now = function () { var iso = new Date().toISOString(); return iso.split("T")[1].split(".")[0]; };
ws.onmessage = function (msg) { var line = now() + " " + msg.data + "\n"; chat.innerText += line; };
text.onkeydown = function (e) { if (e.keyCode === 13 && text.value !== "") { ws.send("<" + name + "> " + text.value); text.value = ""; } };
</script> </body> </html>
|
运行: