http://www.cnblogs.com/wangrudong003/p/5535689.html
go代码部分: [cpp]view plaincopy
//WebChatprojectmain.go
packagemain
import(
"fmt"
"net/http"
"time"
"encoding/json"
"strings"
"golang.org/x/net/websocket"
)
//全局信息
vardatasDatas
varusersmap[*websocket.Conn]string
funcmain(){
fmt.Println("启动时间")
fmt.Println(time.Now())
//初始化
datas=Datas{}
users=make(map[*websocket.Conn]string)
//绑定效果页面
http.HandleFunc("/",h_index)
//绑定socket方法
http.Handle("/webSocket",websocket.Handler(h_webSocket))
//开始监听
http.ListenAndServe(":8080",nil)
}
funch_index(whttp.ResponseWriter,r*http.Request){
http.ServeFile(w,r,"index.html")
}
funch_webSocket(ws*websocket.Conn){
varuserMsgUserMsg
vardatastring
for{
//判断是否重复连接
if_,ok:=users[ws];!ok{
users[ws]="匿名"
}
userMsgsLen:=len(datas.UserMsgs)
fmt.Println("UserMsgs",userMsgsLen,"users长度:",len(users))
//有消息时,全部分发送数据
ifuserMsgsLen>0{
b,errMarshl:=json.Marshal(datas)
iferrMarshl!=nil{
fmt.Println("全局消息内容异常...")
break
}
forkey,_:=rangeusers{
errMarshl=websocket.Message.Send(key,string(b))
iferrMarshl!=nil{
//移除出错的链接
delete(users,key)
fmt.Println("发送出错...")
break
}
}
datas.UserMsgs=make([]UserMsg,0)
}
fmt.Println("开始解析数据...")
err:=websocket.Message.Receive(ws,&data)
fmt.Println("data:",data)
iferr!=nil{
fmt.Println("接收出错...")
break
}
data=strings.Replace(data,"/n","",0)
err=json.Unmarshal([]byte(data),&userMsg)
iferr!=nil{
fmt.Println("解析数据异常...")
break
}
fmt.Println("请求数据类型:",userMsg.DataType)
switchuserMsg.DataType{
case"send":
//赋值对应的昵称到ws
users[ws]=userMsg.UserName
//清除连接人昵称信息
datas.UserDatas=make([]UserData,0)
//重新加载当前在线连接人
for_,item:=rangeusers{
userData:=UserData{UserName:item}
datas.UserDatas=append(datas.UserDatas,userData)
}
}
datas.UserMsgs=append(datas.UserMsgs,userMsg)
}
}
}
typeUserMsgstruct{
UserNamestring
Msgstring
DataTypestring
}
typeUserDatastruct{
UserNamestring
}
typeDatasstruct{
UserMsgs[]UserMsg
UserDatas[]UserData
}
查看原文:http://www.zoues.com/2016/10/20/golang%e5%ae%9e%e7%8e%b0%e5%9f%ba%e4%ba%8ewebsocket%e5%8d%8f%e8%ae%ae%e7%9a%84h5%e8%81%8a%e5%a4%a9%e5%ae%a4%e4%b8%8a/ (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|