开发进阶
针对于短连接而言,每一次发送接收数据即关闭连接,连接的处理逻辑比较简单,当然通信效率也会比较低。在大多数的TCP通信场景中,往往是使用长连接操作,并采用异步全双工的TCP通信模式,即所有的通信完全是异步。在这种场景下, gtcp.Conn
链接对象可能同时处于多个读写操作( gtcp.Conn
对象的数据读写操作是并发安全的),因此 SendRecv
操作在逻辑上将会失效。因为当你在同一逻辑操作中发送完毕数据之后,随后立即获取数据有可能得到的是其他写操作的结果。
无论服务端还是客户端,都需要在独立的异步循环中封装使用 Recv*
方法获取数据并通过 switch...case...
处理数据(仅在一个 goroutine
中全权负责读取数据),根据请求数据进行业务处理的转发。
也就是说, Send*
/ Recv*
方法是并发安全的,但是发送数据时要一次性发送。由于支持异步并发写, gtcp.Conn
对象不带任何缓冲实现。