最近看了一些关于golang的资料,发现它的WEBSOCKT实现真起来真的很容易,下面是代码
go/websocket是需要安装的,这个自己装上就行
package main
import (
"container/list"
"fmt"
"go/websocket"
"io"
"net/http"
)
var connid int
var conns *list.List
func Chat(ws *websocket.Conn) {
defer ws.Close()
item := conns.PushBack(ws)
defer conns.Remove(item)
var err error
for {
var data string
if err = websocket.Message.Receive(ws, &data); err != nil {
fmt.Printf("disconnectedn")
break
}
SendMessage(item, fmt.Sprintf("%s", data))
}
}
func SendMessage(self *list.Element, data string) {
//for _, item := range conns {
for item := conns.Front(); item != nil; item = item.Next() {
ws, ok := item.Value.(*websocket.Conn)
if !ok {
panic("item not *websocket.Conn")
}
if item == self {
continue
}
io.WriteString(ws, data)
}
}
// 客户端默认显示页面
func Client(w http.ResponseWriter, r *http.Request) {
html := `<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>golang websocket chatroom</title>
<script language="javascript"type="text/javascript">
var sock=null;
var wsuri ="ws://192.168.1.163:7878/chat"; //这里的IP如果是局域测试的话,需要换成自己的
load = function(){
console.log("onload");
sock = new WebSocket(wsuri);
pen=function(e){
console.log("connected to "+wsuri);
}
lose=function(e){
console.log("connection closed (" + e.code + ")");
}
ssage=function(e){
console.log("message received: " + e.data);
ElementById("list").innerHTML += e.data;
var div = ElementById("list")
div.scrollTop = div.scrollHeight;
}
}
function send () {
var who = ElementById('who').value;
if (who.length == 0){
ElementById('who').focus();
return
}
var msg = ElementById('msg').value;
if (msg.length == 0){
ElementById('msg').focus();
return
}
var data = who + " say: " + msg + "<br/><br/>";
ElementById('msg').value="";
ElementById('who').value="";
var div = ElementById("list")
div.innerHTML += data;
div.scrollTop = div.scrollHeight;
sock.send(data);
}
</script>
</head>
<body>
<div id="list" style="height: 300px;overflow-y: scroll;border: 1px solid #CCC;">
</div>
<div>
who are you
<input type="text" id="who" size="60" />
your message
<input type="text" id="msg" size="60" />
<button οnclick="send()">send</button>
</div>
</body>
</html>`
io.WriteString(w, html)
}
func main() {
conns = list.New()
http.Handle("/chat", websocket.Handler(Chat))
http.HandleFunc("/", Client)
err := http.ListenAndServe(":7878", nil)
if err != nil {
panic("ListenAndServe: " + err.Error())
}
}
本文发布于:2024-01-27 19:03:19,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063533982049.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |