Giter Site home page Giter Site logo

Comments (9)

gansidui avatar gansidui commented on June 22, 2024

看下是不是ReadPacket里面解包出错了,这个打印点log看看就知道。
PacketReceiveChanLimit 不用设置这么大,这个可是实实在在的内存消耗,参考demo。

from gotcp.

jdwang001 avatar jdwang001 commented on June 22, 2024

嗯,已经在ReadPacket进行验证,得出了以上的结论,也是很费解。所以提了这个issues。
哈哈,就是玩玩,尝试了这么大,但是问题依旧,现在PacketReceiveChanLimit=1,直接在ReadPacket进行的处理,OnMessage直接返回true。所以想问问,是否发现过这类问题。
我是wireshark和程序同时验证的
并且,OnConnect和OnClose能正常接收到连接事件。也是由此,发现OnMessage未响应。

from gotcp.

gansidui avatar gansidui commented on June 22, 2024

在conn.go里面读写packetReceiveChan 的地方打印log调试

from gotcp.

jdwang001 avatar jdwang001 commented on June 22, 2024
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.

jdwang001 avatar jdwang001 commented on June 22, 2024
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.

gansidui avatar gansidui commented on June 22, 2024

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.

gansidui avatar gansidui commented on June 22, 2024

可以在 func (c *Conn) Close() 这个函数里面把未处理的message回调出去。

from gotcp.

jdwang001 avatar jdwang001 commented on June 22, 2024
		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.

gansidui avatar gansidui commented on June 22, 2024

用户可能在OnMessage里面通过conn来发送数据,所以这里 是先判断close,再通过OnMessage回调

from gotcp.

Related Issues (16)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.