类
线程化套接字服务ThreadedSocketService
自2.22开始
描述 [代码]
class Gio.ThreadedSocketService : Gio.SocketService
{
priv: GThreadedSocketServicePrivate*
}
GThreadedSocketService
是 GSocketService
的一个简单子类,处理传入的连接是通过创建一个工作线程,并通过在新的线程中发出 [信号 @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开始
信号
Gio.ThreadedSocketService::run
当响应传入连接时,在工作线程中发出::run信号。该线程专用于处理connection
,可能执行阻塞IO。信号处理器需要在连接关闭之前不返回。
从GSocketService继承的信号(1)
GSocketService::incoming
当需要处理服务service
的新传入连接时发出::incoming信号。处理器必须启动connection
的处理,但不能阻塞;本质上,必须使用异步操作。
自2.22开始
从GSocketListener继承的信号(1)
GSocketListener::event
当listener
在socket
上的活动状态发生变化时发出。请注意,当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 )
无描述信息。