Я настроил свой сервер согласно рекомендации. Иметь один цикл событий на поток. Чем я слушаю каждый порт, используя so_reuseport. Кажется, все работает. Я не пытаюсь сделать setUserData / getUserData из соединения другого потока. Что я делаю, это:
struct websocketsession { size_t uid; char * token }
В моем onconnection я выделяю websocketsesion, устанавливаю для него значения, которые мне нужны, используя malloc для токена (который я освобождаю при отключении), чем я делаю следующее внутри моего onconnection:
struct websocketsession* sess = session_allocate(userid, token); // this should allocate it, and return a pointer from the heap
ws->setUserData((void *) sess)
Когда мне позже понадобится доступ к этим данным, во время сообщения я делаю:
struct websocketsesssion* s = (struct websocketsession*) ws->getUserData();
bool can_access = check_for_permission_to_resource (s->uid, s->token, requested_resource);
Кажется, это работает, но мне интересно, есть ли возможные проблемы с этой реализацией с помощью uwebsocket? Я бы предпочел использовать свою собственную карту с замками, но рекомендованным способом было использовать setUserData / getUserData.
Я просмотрел соответствующий код, кажется, что примитивов синхронизации не существует, однако, поскольку он является локальным для каждого потока, насколько я понимаю, я думаю, что он должен быть безопасным для потоков - просто интересно, есть ли гарантия, или у кого-нибудь есть опыт с этим?