как сделать сервер на uWebSockets доступным из сети?
всем привет, мне нужно написать сервер, который принимает команды от клиентов и делает что-то с базой данных. по SQL у меня нет вопросов, но выбирая способ связи с клиентами, наткнулся на uWebSockets и вот с такого кода, у меня все работает, но это работает только на локалхост. не могу найти как сделать, чтоб сервер был общедоступный в сети по статическому ip:port?
#include <iostream>
#include <uwebsockets/App.h>
#include <string>
#include <map>
struct UserConnection {
std::string name;
unsigned long user_id;
};
/*
ws = new WebSocket("ws://localhost:8888/");
ws.onmessage=({data})=>console.log(data);
ws.send("somecommand");
*/
void newUserConnected(std::string channel, auto * ws, std::string name, unsigned int user_id) {
std::string_view message("NEW_USER=" + std::to_string(user_id) + "," + name);
ws->publish("broadcast", message);
}
int main()
{
int port = 8888;
unsigned long latest_user_id = 10;
std::map<unsigned long, std::string> online_users;
uWS::App().ws<UserConnection>("/*", {
.open = [&latest_user_id, &online_users](auto* ws) {
UserConnection* data = (UserConnection*)ws->getUserData();
data->user_id = latest_user_id++;
data->name = "UNNAMED";
std::cout << "New user connected ID = " << data->user_id << std::endl;
ws->subscribe("broadcast");
std::string user_channel("user#" + std::to_string(data->user_id));
ws->subscribe(user_channel);
//connection open
online_users[data->user_id] = data->name;
for (auto entry : online_users) {
newUserConnected(user_channel, ws, entry.second, entry.first);
}
},
.message = [&online_users](auto* ws, std::string_view message, uWS::OpCode opCode) {
std::string SET_NAME("SET_NAME=");
std::string MESSAGE_TO("MESSAGE_TO=");
UserConnection* data = (UserConnection*)ws->getUserData();
std::cout << "New message received = " << message << std::endl;
if (message.find(SET_NAME) == 0) {
std::cout << "User sets their name" << std::endl;
data->name = message.substr(SET_NAME.length());
online_users[data->user_id] = data->name;
newUserConnected("broadcast",ws, data->name, data->user_id);
}
if (message.find("MESSAGE_TO") == 0) {
std::cout << "User sends private message" << std::endl;
auto rest = std::string(message.substr(MESSAGE_TO.length()));
int comma_position = rest.find(",");
auto ID = rest.substr(0, comma_position);
auto text = data->name + ": " + rest.substr(comma_position + 1);
ws->publish("user#" + std::string(ID), text);
}
},
.close = [&online_users](auto* ws, int code, std::string_view message)
{
UserConnection* data = (UserConnection*)ws->getUserData();
ws->publish("broadcast", "DISCONNECT=" + data->user_id);
online_users.erase(data->user_id);
},
}).listen(port, [&port](auto* token) {
if (token)
std::cout << "Server started successfully on port " << port << std::endl;
else std::cout<< "Server failed to start" << std::endl;
}).run();
}