我正在尝试使用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作为一个应用程序员
从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);