-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
workflow http server在公网,client终端设备在私网。当建立http长连接以后,server如何主动给client发消息? #929
Comments
你好。http client应该不是workflow的吧? void timer_callback(WFTimerTask *timer)
{
SeriesWork *series = series_of(timer);
WFHttpTask *server_task = (WFHttpTask *)series->get_context();
server_task->push("4\r\ntest\r\n", strlen(" ... ")); // chunked编码的数据块
timer = WFTaskFactory::create_timer_task(1, 0, timer_callback);
series->push_back(timer);
}
void process(WFHttpTask *server_task)
{
SeriesWork *series = series_of(server_task);
series->set_context(server_task);
server_task->push("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r\n", strlen(" ... ")); // 需要自行构建http header
WFTimerTask *timer = WFTaskFactory::create_timer_task(1, 0, timer_callback);
server_task->noreply(); // 无需发送原来的http response了
series->push_back(timer);
} 这个就实现了server向client定期发送数据。但注意push接口是一个同步调用,如果数据超过tcp send buf大小,push返回实际写入的数据,而无法自动进行异步写。 |
谢谢回复! |
我回复的这个示例,就是解决了你的这几个问题啊😂 |
你好!现在遇到一个例外的问题,描述如下:
问题描述:workflow是一款高效http服务器,一般http server主要是这样的一个处理流程:先与客户端建立连接、接收客户端发送的请求,最后给客户端返回请求响应。现在的需求是,在满足以上流程功能外,在与客户端建立长连接和保持心跳以后,还要求http server 能够通过长连接主动的给client发送消息。
场景描述:http server在公网,http client 在私网。私网可以找到公网server ip,所以client可以主动发起与server的长连接请求,并建立长连接,client可以向server发送数据和心跳等请求,也能正常收到server的响应。但是现在server需要给client发送消息命令(http client支持的命令),由于client在私网无法找到client 的ip,所以如何通过server 与client的长连接给client发送消息命令。
client限制:由于client终端设备出厂设定,所以无法更改连接方式。现在只支持http一种连接方式,不支持websocket等连接。
OS:Linux
语言:C++
盼解决,谢谢!
The text was updated successfully, but these errors were encountered: