1 下载源码
https://github.com/uNetworking/uWebSockets
2 使用(服务端)
class Server {
public:
std::promise<void> server_ready_promise;
struct MyData
{
/* data */
std::string custom_data;
};
void runServer() {
uWS::App().ws<MyData>("/*", {
.open = [](auto* ws) {
MyData* myData = (MyData*)ws->getUserData();
myData->custom_data = "initial data";
std::cout << "Server: Client connected" << std::endl;
},
.message = [](auto* ws, std::string_view message, uWS::OpCode opCode) {
std::cout << "Server: Received and broadcast message: " << message << std::endl;
ws->publish("broadcast", message, opCode);
},
.close = [](auto* ws, int code, std::string_view message) {
std::cout << "Server: Client disconnected" << std::endl;
}
}).listen(9001, [this](auto* listen_socket) {
if (listen_socket) {
std::cout << "Server listening on port 9001" << std::endl;
server_ready_promise.set_value(); // 服务器已准备好
}
}).run();
}
};
3 加到UE中
BUG:
1 Warning C4996 : 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
使用_dupenv_s代替:// 原代码(产生警告)
const char* env_value = getenv("ENV_VAR_NAME"); // 替换为 char* env_value = nullptr; size_t len = 0; errno_t err = _dupenv_s(&env_value, &len, "ENV_VAR_NAME");
BUG:
2 HttpParser.h(359): Error C4459 : “err”的声明隐藏了全局声明
将局部变量名改为其他名称,避免与全局冲突:err->localerr
BUG:
3 从“unsigned char”到 bool 的隐式转换。信息可能丢失
使用 static_cast显示转换
<bool>(numMessageIndices);
BUG:
4 从“int”到 bool 的隐式转换。信息可能丢失
protocol::formatMessage<isServer>(sendBuffer, message.data(), message.length(), opCode, message.length(), static_cast<bool>(compress), fin);
static_cast<bool>(compress)
BUG:
5 WebSocket.h(168): Error C4456 : “webSocketData”的声明隐藏了上一个本地声明
WebSocketData *webSocketData_ = (WebSocketData *) Super::getAsyncSocketData();
浙公网安备 33010602011771号