Boost asio的协程示例显示了如何将yield上下文作为完成处理程序传递给套接字:
// coroutine which demultiplexes into tcp and udp
void packet_processor(boost::asio::yield_context yield)
{
for (;;)
{
auto packet = input_queue.pop(yield);
if (packet.is_tcp())
{
tcp_queue.push(packet);
}
else if (packet.is_udp())
{
udp_queue.push(packet);
}
}
}
// coroutine which handles UDP datagrams
void udp_processor(boost::asio::yield_context yield)
{
for (;;)
{
auto udp_segment = udp_queue.pop(yield);
process(udp_segment);
}
}
// coroutine which handles tcp segments
void tcp_processor(boost::asio::yield_context yield)
{
for (;;)
{
auto tcp_segment = tcp_queue.pop(yield);
process(tcp_segment);
}
}
是否可以实现用户定义的数据结构以提供与套接字相同的功能?
我的目标是实现一个(单线程)数据包处理,其中协程就像光纤一样:
maxAge = j
上面的代码可以使用吗?