gpt4 book ai didi

c++ - 如何使用 POCO 发送 websocket PONG 响应

转载 作者:太空狗 更新时间:2023-10-29 20:35:38 25 4
gpt4 key购买 nike

我正在尝试使用 POCO 1.7.5 设置一个 websocket 服务器。

来自POCO的样本发现here效果很好。第 111-122 行内容(略微美化):

WebSocket ws(request, response);
char buffer[1024];
int n, flags;

do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
ws.sendFrame(buffer, n, flags);
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);

但是,这种方法不负责通过 pong 帧来应答 ping 帧。如何使用 POCO 正确执行此操作?我尝试了以下方法,但我不知道它是否正确:

WebSocket ws(request, response);
char buffer[1024];
int n, flags;

do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING){
buffer[0] = WebSocket::FRAME_OP_PING;
ws.sendFrame(buffer, 1, WebSocket::FRAME_OP_PONG);
}
else{
ws.sendFrame(buffer, n, flags);
}
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);

不知道这样做是否正确,也无法在网上找到如何做,包括 POCO 文档。 websocket RFC 6465拥有大量信息,但我不想去那里,因为我只想在这里使用 websocket 作为应用程序程序员

最佳答案

在 RFC 中,您必须发送带有 WebSocket::FRAME_OP_PONG 标志的相同缓冲区。试试这个:

do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING) {
ws.sendFrame(buffer, n, WebSocket::FRAME_OP_PONG);
}
else {
ws.sendFrame(buffer, n, flags);
}
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);

关于c++ - 如何使用 POCO 发送 websocket PONG 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com