当前位置:  开发笔记 > 编程语言 > 正文

如何使用POCO发送websocket PONG响应

如何解决《如何使用POCO发送websocketPONG响应》经验,为你挑选了1个好方法。

我正在尝试使用POCO 1.7.5设置websocket服务器.

这里发现的POCO样本效果很好.111-122行读取(sligthly prettified):

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);

但是,这种方法不需要通过乒乓帧来回答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作为一个应用程序员



1> 小智..:

从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);

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有