线程化套接字服务ThreadedSocketService

自2.22开始

描述 [代码]

class Gio.ThreadedSocketService : Gio.SocketService
{
  priv: GThreadedSocketServicePrivate*
}

GThreadedSocketServiceGSocketService 的一个简单子类,处理传入的连接是通过创建一个工作线程,并通过在新的线程中发出 [信号 @Gio.ThreadedSocketService::run] 信号将连接调度到该线程。

信号处理器可能会执行阻塞I/O,并且不需要在连接关闭之前返回。

服务使用线程池实现,因此可用于服务传入请求的线程数量有限。当所有线程都忙碌时,服务会自动阻止 GSocketService 接受新的连接。

GSocketService 一样,您可以连接到 GThreadedSocketService::run 或子类并覆盖默认处理器。

自2.22可用

构造函数

g_threaded_socket_service_new

创建一个新的、不带监听器的 GThreadedSocketService。必须使用 GSocketListener 的某种 "add" 方法添加监听器。

自2.22开始

实例方法

GSocketService 继承的方法(3个)
g_socket_service_is_active

检查服务是否处于活动状态。活动服务将接受连接到的新客户端,而未活动的服务将让连接客户端排队,直到服务启动。

自2.22开始

g_socket_service_start

重新启动服务,即当主循环运行时开始接受添加的套接字连接。这只需要在服务从 g_socket_service_stop() 被停止后调用。

自2.22开始

g_socket_service_stop

停止服务,即当主循环运行时停止从添加的套接字接受连接。

自2.22开始

GSocketListener 继承的方法(12个)
g_socket_listener_accept

阻塞等待客户端连接到监听器添加的任何套接字。返回被接受的套接字的 GSocketConnection

自2.22开始

g_socket_listener_accept_async

这是 g_socket_listener_accept() 的异步版本。

自2.22开始

g_socket_listener_accept_finish

完成异步接受操作。请参阅 g_socket_listener_accept_async()。

自2.22开始

g_socket_listener_accept_socket

阻塞等待客户端连接到监听器添加的任何套接字。返回被接受的 GSocket

自2.22开始

g_socket_listener_accept_socket_async

这是 g_socket_listener_accept_socket() 的异步版本。

自2.22开始

g_socket_listener_accept_socket_finish

完成异步接受操作。请参阅 g_socket_listener_accept_socket_async()。

自2.22开始

g_socket_listener_add_address

创建类型为 type 和协议 protocol 的套接字,将其绑定到 address 并添加到我们接受的套接字集合中。

自2.22开始

g_socket_listener_add_any_inet_port

监听 IPv6 和 IPv4(如有可用)上的任一可用端口号的 TCP 连接。

自2.24开始

g_socket_listener_add_inet_port

g_socket_listener_add_address()的辅助函数,它在所有接口上创建监听IPv4和IPv6(如果支持)指定端口的TCP/IP套接字。

自2.22开始

g_socket_listener_add_socket

将套接字socket添加到我们尝试从中接受新客户端的套接字集合中。套接字必须绑定到本地地址并进行监听。

自2.22开始

g_socket_listener_close

关闭监听器中的所有套接字。

自2.22开始

g_socket_listener_set_backlog

设置监听器中套接字的监听队列大小。必须在向GSocketListener(例如,通过调用g_socket_listener_add_inet_port())添加任何套接字、地址或端口号之前调用此函数才能生效。

自2.22开始

GObject继承的方法(43)

请参阅GObject获取方法列表的全览。

属性

Gio.ThreadedSocketService:max-threads

为此服务处理客户端的最大线程数。

自2.22开始

GSocketService继承的属性(1)
Gio.SocketService:active

服务当前是否正在接受连接。

since: 2.46

GSocketListener继承的属性(1)
Gio.SocketListener:listen-backlog

监听队列中的挂起连接数。

自2.22开始

信号

Gio.ThreadedSocketService::run

当响应传入连接时,在工作线程中发出::run信号。该线程专用于处理connection,可能执行阻塞IO。信号处理器需要在连接关闭之前不返回。

GSocketService继承的信号(1)
GSocketService::incoming

当需要处理服务service的新传入连接时发出::incoming信号。处理器必须启动connection的处理,但不能阻塞;本质上,必须使用异步操作。

自2.22开始

GSocketListener继承的信号(1)
GSocketListener::event

listenersocket上的活动状态发生变化时发出。请注意,当listener用于监听IPv4和IPv6时,将为每个地址发出一组单独的信号,事件发生的顺序是未定义的。

since: 2.46

GObject继承的信号(1)
GObject::notify

当对象的一个属性通过g_object_set_property()、g_object_set()等设置值时发出notify信号。

类结构

struct GioThreadedSocketServiceClass {
  GSocketServiceClass parent_class;
  gboolean (* run) (
    GThreadedSocketService* service,
    GSocketConnection* connection,
    GObject* source_object
  );
  void (* _g_reserved1) (
void
  );
  void (* _g_reserved2) (
void
  );
  void (* _g_reserved3) (
void
  );
  void (* _g_reserved4) (
void
  );
  void (* _g_reserved5) (
void
  );
  
}

无描述信息。

类成员
parent_class: GSocketServiceClass

无描述信息。

run: gboolean (* run) ( GThreadedSocketService* service, GSocketConnection* connection, GObject* source_object )

无描述信息。

_g_reserved1: void (* _g_reserved1) ( void )

无描述信息。

_g_reserved2: void (* _g_reserved2) ( void )

无描述信息。

_g_reserved3: void (* _g_reserved3) ( void )

无描述信息。

_g_reserved4: void (* _g_reserved4) ( void )

无描述信息。

_g_reserved5: void (* _g_reserved5) ( void )

无描述信息。

虚拟方法