刘丹冰

Results 111 comments of 刘丹冰

不错,用反射得到TcpServer是否有实体对象指向,然后再使用,这样、类型和野指针就都做了判断。 很感谢。 但是reflect会很耗性能,如果CallOnConnStop()这个函数,不经常被调用 你说的这种方式更好。

能把最近的或者全部的堆栈信息打出来么,感觉开的go的数量太多了。是不是开的链接太多,可以限定一下最大链接数量。

客户端的都应该可以运行起来,客户端的依赖库都在client_Data目录下。如果客户端log日志在“client_Data/out_put.txt”中。不过如果你运行不起来可能是缺少文件或者是文件夹权限问题,我这里有个链接,你可以下载一下再试试。链接: https://pan.baidu.com/s/17hZFJvjgwYryNLwN7_K3cw 提取码: 1sh5

您windows后台找到进程 ”QQ安全防护进程(Q盾)“给它关闭应该就可以了,qq这个进程和客户端相冲突。

是可以的,因为每个worker和玩家业务的链接是一一对应的。 你可以理解为一个客户端的是绑定一个链接的。链接和worker是一一对应的,如果链接依次发消息,消息也是顺序的保存在对应的worker队列中,那么对于每个链接,实际上消息是不会发送给其他的worker上,这样的worker从队列另一头会一个一个消息取出,就会保证每个客户端的消息顺序问题。

详细代码在`zinx/znet/msghandler.go`中,您可以仔细看看,再有问题,再讨论。

完全可以,您可以加我的联系方式,我可以给您开通权限的。

客户端可能和qq的后台Q盾进程相冲突 你搜一下后台进程"QQ安全防护进程(Q盾)" 给他关闭,应该就可以打开了。

```go //启动连接,让当前连接开始工作 func (c *Connection) Start() { //1 开启用户从客户端读取数据流程的Goroutine go c.StartReader() //2 开启用于写回客户端数据流程的Goroutine go c.StartWriter() //按照用户传递进来的创建连接时需要处理的业务,执行钩子方法 c.TcpServer.CallOnConnStart(c) } ``` 这是connection.go的代码, 目前的socket读写就是分别在这两个go里面完成的,实际上现在就是一个连接过来,会针对这个客户端socket创建两个go,一个reader go, 读完之后,从路由中取业务处理, 一个是 writer go, 将要写给客户端的数据,发送给worker pool处理。