Comments (9)
看下是不是ReadPacket里面解包出错了,这个打印点log看看就知道。
PacketReceiveChanLimit 不用设置这么大,这个可是实实在在的内存消耗,参考demo。
from gotcp.
嗯,已经在ReadPacket进行验证,得出了以上的结论,也是很费解。所以提了这个issues。
哈哈,就是玩玩,尝试了这么大,但是问题依旧,现在PacketReceiveChanLimit=1,直接在ReadPacket进行的处理,OnMessage直接返回true。所以想问问,是否发现过这类问题。
我是wireshark和程序同时验证的
并且,OnConnect和OnClose能正常接收到连接事件。也是由此,发现OnMessage未响应。
from gotcp.
在conn.go里面读写packetReceiveChan 的地方打印log调试
from gotcp.
OnConnect: 192.168.12.200:44388
ReadPacket is over
handleLoop receive packetReceiveChan
Get OnMessage
readloop 0 0xc42006e360
OnClose: 192.168.12.200:44388
OnConnect: 192.168.12.200:45300
ReadPacket is over
readloop 0 0xc42006e480
handleLoop receive packetReceiveChan
OnClose: 192.168.12.200:45300
handleLoop receive packetReceiveChan IsClosed
OnConnect: 192.168.12.200:45302
ReadPacket is over
readloop 0 0xc4201460c0
handleLoop receive packetReceiveChan
OnClose: 192.168.12.200:45302
handleLoop receive packetReceiveChan IsClosed
OnConnect: 192.168.12.200:45303
ReadPacket is over
readloop 0 0xc42006e5a0
handleLoop receive packetReceiveChan
handleLoop receive packetReceiveChan IsClosed
OnClose: 192.168.12.200:45303
OnConnect: 192.168.12.200:45304
ReadPacket is over
readloop 0 0xc4201461e0
handleLoop receive packetReceiveChan
handleLoop receive packetReceiveChan IsClosed
OnClose: 192.168.12.200:45304
OnConnect: 192.168.12.200:45305
ReadPacket is over
readloop 0 0xc4201be0c0
OnClose: 192.168.12.200:45305
handleLoop receive packetReceiveChan
handleLoop receive packetReceiveChan IsClosed
from gotcp.
func (c *Conn) handleLoop() {
defer func() {
recover()
c.Close()
}()
for {
select {
case <-c.srv.exitChan:
return
case <-c.closeChan:
return
case p := <-c.packetReceiveChan:
fmt.Printf("handleLoop receive packetReceiveChan \n")
if c.IsClosed() {
fmt.Println("handleLoop receive packetReceiveChan IsClosed")
return
}
if !c.srv.callback.OnMessage(c, p) {
fmt.Println("handleLoop receive packetReceiveChan OnMessage")
return
}
}
}
}
func (this *Callback) OnMessage(c *gotcp.Conn, p gotcp.Packet) bool {
fmt.Println("Get OnMessage")
return true
}
比较无法理解。。。。。。。
from gotcp.
OnClose: 192.168.12.200:45300
handleLoop receive packetReceiveChan IsClosed
客户端发送数据后立即断开连接了。
go if c.IsClosed() { fmt.Println("handleLoop receive packetReceiveChan IsClosed") return }
这里return了,没法执行下面的 OnMessage。
这个地方其实是个bug,#14 ,之前有人提过这个问题,还没有修改好
from gotcp.
可以在 func (c *Conn) Close() 这个函数里面把未处理的message回调出去。
from gotcp.
case p := <-c.packetReceiveChan:
fmt.Printf("handleLoop receive packetReceiveChan \n")
if !c.srv.callback.OnMessage(c, p) {
fmt.Println("handleLoop receive packetReceiveChan OnMessage")
return
}
if c.IsClosed() {
fmt.Println("handleLoop receive packetReceiveChan IsClosed")
return
}
}
如果先读取,而后在判断是否close,会造成什么结果? 数据长度过长,分开处理?
from gotcp.
用户可能在OnMessage里面通过conn来发送数据,所以这里 是先判断close,再通过OnMessage回调
from gotcp.
Related Issues (16)
- 目前 server 运行起来后 客户端链接通信必须符合 type 标准,否则 server 错误推出 HOT 3
- How to deal with half packet data? HOT 4
- 如何平滑重启或者停止server HOT 2
- waitGroup.Add(1) 不能放置于 goroutine 内部 HOT 1
- 关于waitgroup HOT 2
- 有个疑问 HOT 1
- 异步服务有些问题. HOT 18
- 你这支持异步写数据么? HOT 5
- 建议以树形结构维护客户端,新增连接池,多协议,增加事件回调等 HOT 10
- 连接断掉,conn的HandleChannel里的packet未处理给丢弃了 HOT 3
- 请问如何优雅地使用gotcp框架做客户端? HOT 2
- 请问gotcp 框架的处理性能你有测试过吗? HOT 2
- conn.go中的asyncDo函数加*sync.WaitGroup的作用是什么?
- ReadPacket只能一次返回一个包呀. HOT 2
- 请教一个问题 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gotcp.