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