当我从 js 客户端发送socket.send('{"text":"111"}')
并在服务器上获取此数据时,websocket.JSON.Receive(ws, &data)
数据保持为空。我使用“golang.org/x/net/websocket”
type (
Msg struct {
clientKey string
text string
}
NewClientEvent struct {
clientKey string
msgChan chan *Msg
}
Item struct {
text string
}
)
var (
clientRequests = make(chan *NewClientEvent, 100)
clientDisconnects = make(chan string, 100)
messages = make(chan *Msg, 100)
)
func ChatServer(ws *websocket.Conn) {
msgChan := make(chan *Msg, 100)
clientKey := time.Now().String()
clientRequests <- &NewClientEvent{clientKey, msgChan}
defer func(){ clientDisconnects <- clientKey}()
go func(){
for msg := range msgChan{
ws.Write([]byte(msg.text))
}
}()
for {
var data Item
err := websocket.JSON.Receive(ws, &data)
if err != nil {
log.Println("Error: ", err.Error())
return
}
messages <- &Msg{clientKey, data.text}
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我尝试socket.send('"text"')
通过以下方式发送和获取它:
var data string
err := websocket.JSON.Receive(ws, &data)
if err != nil {
log.Println("Error: ", err.Error())
return
}
messages <- &Msg{clientKey, data}
Run Code Online (Sandbox Code Playgroud)
一切正常。
很可能您需要先定义结构,然后才能JSON.receive
在像这样的对象上使用
{ "text": "Hi" }
type socketData struct {
Text string `json:"text"`
}
Run Code Online (Sandbox Code Playgroud)
然后
data := &socketData{}
websocket.JSON.receive(ws, &data)
log.Println(data.Text) // Hi
Run Code Online (Sandbox Code Playgroud)
如果您要发送随机数据,而您无法真正为其定义结构(尽管这是首选方法),您只需声明一个interface{}
var data map[string]interface{}
log.Println(data["text"].(string)) // Hi
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/Jp5qKtiUGw
归档时间: |
|
查看次数: |
10816 次 |
最近记录: |