Linux TCP网关的线程结构方案

如果所示:

无论客户端还是服务端链接网关的socket都拆分为读EPoll、写EPoll分别独立。

有两个线程:线程A(左)、线程B(右):

  1. 线程A负责服务端Socket的读和客户端socket的写,当读到服务端socket发给客户端的数据时根据规则找到对应的客户端的socket并直接写。
  2. 线程B负责服务端Socket的写和客户端socket的读,当读到客户端socket发给服务端的数据时根据规则找到对应的服务端的socket并直接写。

优点:

无论线程A和线程B在转发数据时,无需将数据投递到另外的线程,从而避免可能的线程唤醒操作导致的性能消耗。