赞
踩
1 )选型
2 )安装 gorilla 的 websocket
cd $GOPATH
mkdir -p golang.org/x/net
cd golang.org/x/net
go get -u github.com/golang/net/websocket
go get github.com/gorilla/websocket
3 )Websocket 的鉴权
3.1 鉴权成功
3.2 鉴权失败
4 ) 用户的基本结构
5 ) 接入鉴权
conn的维护
6 )消息的发送
7 )消息的接收
8 )消息的发送
conn.WriteMessage(websocket.TextMessage, msg)
方法把这个 msg 输出9 ) 前端 JS 打开 websocket
// 火狐,chrome
var websocket = new WebSocket(url);
// 打开事件回调
websocket.onopen = function(ev) {
// 启用心跳
}
new WebSocket
方法, 传入 URL, 这个url 就是有userid 和 token 的url10 )WS的心跳机制
11 )前端发送消息
data = JSON.stringify(msg对象)
websocket.send(data)
// 队列发送
12 )前端接收的消息
websocket.onmessage = function(event) {
// 处理 event
data = JSON.parse(event.data)
}
我们看下,A 如何发送消息给B?
1 )A 尝试打开 websocket,路径 /chat?id=xxx&token=sdsdfss
2 ) 后端通过鉴权,建立 userid => websocket 的映射
3 )启用协程,通过 conn.ReadMessage 等待和读取消息
4 )A 发送 Json 字符串消息,里面携带了目标用户 dstid
5 ) 如果是群消息,则分解成群用户ID,进行群发处理
6 ) 后端通过 ClientMap[userid]获得目的用户的 conn
7 ) conn.WriteMessage,这时候在存在连接的情况下就发送给客户端的B了
1 )优化Map
2 ) 突破系统的瓶颈, 优化最大的连接数
3 )优化这个CPU资源的使用率
4 )降低IO资源的使用
5 )对应用服务和资源分布服务相互分离的这一个优化策略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。