hprose / hprose-golang

Hprose is a cross-language RPC. This project is Hprose for Golang.
MIT License
1.26k stars 205 forks source link

tcp服务是单线程没有开协程吗,不能并行处理多个请求? #96

Closed dongbufan closed 3 years ago

dongbufan commented 3 years ago

code

    fmt.Println(global.LogId)
global.LogId = strconv.FormatInt(rand.Int63(),10)
time.Sleep(time.Duration(8)*time.Second)
pUser, _ := model.SpecialUsers.UserList(where, AWhere, page, pageSize)
fmt.Println(global.LogId)

5577006791947779410 5577006791947779410 8674665223082153551 8674665223082153551 6129484611666145821

咋回事呢,qq群有管理吗申请好几天没有通过

andot commented 3 years ago

https://github.com/hprose/hprose-golang/blob/6e31c4c49a229295289bc83edcad01b3bed9cba9/rpc/socket_service.go#L165-L172 设置问全双工,就是开协程处理的。

dongbufan commented 3 years ago

func (handler connHandler) serve(service SocketService) { reader := bufio.NewReader(handler.conn) var data packet for { if err := recvData(reader, &data); err != nil { break } fmt.Println(data.fullDuplex) if data.fullDuplex { datacopy := data service.workerPool.Go(func() { handler.handle(service, datacopy) }); } else { handler.handle(service, data) } } handler.conn.Close() }

true

已经开启,我用php 做client,同时两个相同请求(建立链接执行三个方法间隔sleep(5)),只能先到的请求三个方法执行完第二个才能建立链接 是不是说一个端口只能同时接受一个客户端的链接?

andot commented 3 years ago

客户端一个端口表示的就是一个连接,也就是每建立一个连接,都会开一个客户端端口。但是服务器端一个端口可以接受多个客户端连接。

andot commented 3 years ago

你的问题是 php 客户端的问题,php 客户端同步调用的情况下,就是一个执行完,才会执行下一个,是顺序执行的。

dongbufan commented 3 years ago

感谢