六. Websockets 和 Crow
1. Review javascript 客户端代码
web socket是一种通信协议,可通过单个TCP通道在客户端和服务端之间实时传输数据。
web socket可使用ws和wss协议,crow支持这两种协议,为了在浏览器使用websocket,需要一个javascript编写的客户端。
见hello_crow/public/scripts
2. 创建c++ 服务端的代码
为了实现websocket,需要加两个头文件 unordered_set和mutex,加一个ws的路由。
unordered_set:存储无序元素; mutex:保护线程安全
#include <unordered_set>
#include <mutex>
int main()
{
CROW_ROUTE(app, "/ws")
.websocket()
.onopen([&](crow::websocket::connection& conn){
std::lock_guard<std::mutex> _(mtx);
users.insert(&conn);
})
.onclose([&](crow::websocket::connection& conn, const string& reason){
std::lock_guard<std::mutex> _(mtx);
users.erase(&conn);
})
.onmessage([&](crow::websocket::connection& /*conn*/, const string& data, bool is_binary){
std::lock_guard<std::mutex> _(mtx);
for (auto user:users)
{
if (is_binary)
{
user->send_binary(data);
}
else
{
user->send_text(data);
}
}
});
CROW_ROUTE(app, "/chat")
([](const request& req, response& res){
sendHtml(res,"chat");
});
}
在浏览器打开两个loacalhost:8080/chat
页面,在其中一个输入文字点击Send后,在另一个chat页面实时出现相同文字。
3. 运行websocket在railway上面
把web server部署到railway上,在云平台上看到。
按照二先把bbox:latest推送到auly/bbox:latest里,再部署到railway。
全面检查在railway运行的C++ web服务器。
C++ web服务器在railway上运行🎉。