使用 POCO C++的非阻塞 WebSocket 服务器
Non blocking WebSocket Server with POCO C++
我正在尝试用POCO构建WebSocket服务器。我的服务器应将数据发送到客户端,并且始终在时间间隔内发送。当客户端发送一些数据时,服务器应该操纵它发送给客户端的数据。
我在WebSocketRequestHandler
handleRequest
方法:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
WebSocket ws(request, response);
char buffer[1024];
int flags = 0;
int n = 0;
do {
// recieving message
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
// ... do stuff with the message
// sending message
char* msg = (char *) "Message from server"; // actually manipulated, when message recieved
n = sizeof(msg);
ws.sendFrame(msg, strlen(msg), WebSocket::FRAME_TEXT);
sleep(1); // time intervall sending messages
} while (n > 0 || (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
}
问题是,该方法卡在we.recieveFrame()
中,直到它得到一个框架。
那么我该如何解决这个问题,receiveFrame()
没有阻塞循环。
解决这个完整问题的更好方法吗?
谢谢。
您应该设置接收超时。
ws.setReceiveTimeout(timeout);
因此,您将在每个超时微秒内获得一个Poco::TimeoutException
,您可以做您需要的所有事情,包括通过该 websocket 发送数据。
ws.setReceiveTimeout(1000000);//a second
do{
try{
int n = ws.receiveFrame(buffer, sizeof(buffer), flags);
//your code to manipulate the buffer
}
catch(Poco::TimeoutException&){
....
}
//your code to execute each second and/or after receive a frame
} while (condition);
使用std::thread
或pthread
并在线程的函数中调用阻塞函数
相关文章:
- boost beast websocket服务器也接受http连接
- C++ WebSocket 帧发送会导致服务器关闭连接
- WebSocket++服务器结束,但端口显示仍在使用中
- WebSocket客户端和WinSock2服务器,可能吗?
- 如何在Qt c++中使用Secure WebSocket与服务器连接
- WebSocket服务器握手响应
- 错误请求,您的浏览器发送了此服务器无法理解的请求 - Qt Websocket 服务器
- 在 Winsock ws 客户端和 Websocket 服务器之间建立握手
- 如何从 POCO websocket 服务器解析 html 页面
- 使用Echo客户端示例从Qt UI连接到WebSocket服务器
- 在同一功能/程序中使用WebSocket++服务器和客户端
- 使用 POCO C++的非阻塞 WebSocket 服务器
- Poco C++ Websocket 服务器 - 防止它在 60 秒后关闭
- C++中的Websocket服务器发送消息时出错
- TLS WebSocket服务器与firefox客户端一起工作,但不与chrome客户端一起工作
- Poco websocket服务器示例
- 如何让WebSocket服务器在aws上运行
- 使用websocketpp库连接到一个c++ websocket服务器
- WebSocket服务器实现(接受密钥不匹配)
- 如何实现WebSocket服务器一次只服务一个客户端