我的目标是, 当与客户端建立连接时, 发送一个cookie到客户端去, 必须在这个wss里, 不能使用普通http方法.
我是这么调用的:
```
var responseHeader http.Header
//这里我不知道怎么写了
// responseHeader.Set("Set-Cookie", "SS=Q0=5Lb_nQ; path=/search")
var conn, err = upgrader.Upgrade(w, r, responseHeader)
```
方法的原型是这样的
```
// Upgrade upgrades the HTTP server connection to the WebSocket protocol.
//
// The responseHeader is included in the response to the client's upgrade
// request. Use the responseHeader to specify cookies (Set-Cookie) and the
// application negotiated subprotocol (Sec-WebSocket-Protocol).
//
// If the upgrade fails, then Upgrade replies to the client with an HTTP error
// response.
func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) {
const badHandshake = "websocket: the client is not using the websocket protocol: "
```
![image.png](https://static.studygolang.com/190722/6ce4a56f7683e73c5b173b07565d94e5.png)
有个网络库叫gorilla, gorilla有个包叫websocket, websocket包有个方法叫upgrade, 这个upgrade方法的第三个参数怎么用的?
cups_book · · 2769 次点击我的情况是, 客户端是微信公众号, 单页程序.
并且, 不能从外部浏览器打开, 只能从微信里的公众号, 打开,访问.
所以, 不会有同一个浏览器打开两个网页的情况.
```
//websocket设置
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { //允许跨域
return true
},
}
func APIWssServerSide(w http.ResponseWriter, r *http.Request) {
l.Info("*** apis -> apiswss.go - APIWssServerSide start ***")
var responseHeader http.Header
var conn, err = upgrader.Upgrade(w, r, responseHeader)
l.Info("how to use responseHeader????")
if err != nil {
l.Fatal(err)
}
//向所有客户端广播消息
go func(conn *websocket.Conn) {
ch := time.Tick(4 * time.Second)
for range ch {
conn.WriteJSON(myStrcut{
Username: "tothemoon",
Firstname: "tom",
Lastname: "jerry"})
}
}(conn)
l.Info("--- apis -> apiswss.go - APIWssServerSide end ---")
}
type myStrcut struct {
Username string `json:"username"`
Firstname string `json:"firstName"`
Lastname string `json:"lastName"`
}
```
#7
更多评论
..............
你不觉得,如果是websocket链接上上之后,直接发个message回去,网页监听到后set cookie更靠谱么?
另外gorilla是一个网络库,里面有个websocket的包...
#1
1楼 <a href="/user/jarlyyn" title="@jarlyyn">@jarlyyn</a> 谢谢指正, 我修改了标题.
按照你这个思路的话, 我的问题, 就变成了, 怎么识别客户端, 怎么针对某一个具体的客户端, 发送消息
我搜索了很久, 都没有人用过这第三个参数, 你能帮我看看, 它怎么用吗
https://github.com/gorilla/websocket/tree/master/examples/chat
这个例子, 是讲广播的, 好像没有提到怎么针对某个具体的客户端, 发送消息
#2