cocos使用libwebsockets出现的两个问题 和 解决方案
协议顺序如下: 1.client->>server: dial 2.server->>client: reply open 3.client->>server: dial upgrade 4.client->>server: upgrade ping probe 5.server->>client: upgrade pong probe
客户端:cocos creator 1.8 服务端:golang go-engine.io 在浏览器里面跑一切正常,因为浏览器里用的是socket-io.js库. 打完包后,在android上运行出现问题.android平台用的是libwebsocket静态库 问题一 : 当执行到 协议顺序2 的时候,go-engine.io返回的数据是 xx:0{...}\n 这里多了\n,导致客户端始终显示连接不上. 解决方案: 去掉\n就好了,我使用了另外一种方法json序列化结构体,问题解决. 问题二: 当执行到 协议顺序3 的时候,go-engine.io并没有返回dial upgrade消息,导致客户端握手失败,处于等待状态,症状:也是显示连接不上. 解决方案:手动补充了返回的协议,可以正常收发数据了. 附上代码: server_conn.go: case parser.UPGRADE: c.upgraded() c.writerLocker.Lock() t := c.getCurrent() newWriter := t.NextWriter if w, _ := newWriter(message.MessageText, parser.WEBSOCKET); w != nil { io.Copy(w, r) w.Close() } c.writerLocker.Unlock() packet.go: func newEncoder(w io.Writer, t byte) (*PacketEncoder, error) { if t == 88 { if _, err := w.Write([]byte{52, 48}); err != nil { return nil, err } } else { if _, err := w.Write([]byte{t}); err != nil { return nil, err } }