首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uWebSockets setUserData线程安全吗?

uWebSockets setUserData线程安全吗?
EN

Stack Overflow用户
提问于 2018-09-06 21:09:19
回答 1查看 326关注 0票数 0

我已经按照建议设置了我的服务器。每个线程有一个事件循环。然后我让每个人都使用so_reuseport监听端口。一切似乎都很正常。我没有尝试从另一个线程的连接执行setUserData/getUserData。我所做的是:

代码语言:javascript
复制
struct websocketsession { size_t uid; char * token }

在我的onconnection中,我分配了websocketsesion,将其设置为我需要的值,使用malloc for token (我在断开连接时释放它),然后我在onconnection中执行以下操作:

代码语言:javascript
复制
struct websocketsession* sess = session_allocate(userid, token); // this should allocate it, and return a pointer from the heap
ws->setUserData((void *) sess)

在onmessage期间,当我稍后需要访问此数据时,我会这样做:

代码语言:javascript
复制
struct websocketsesssion* s = (struct websocketsession*) ws->getUserData();
bool can_access = check_for_permission_to_resource (s->uid, s->token, requested_resource);

它似乎在工作,但是我想知道uwebsocket的这个实现是否可能有问题?我更喜欢使用我自己的带锁的map,但推荐的方式是使用setUserData/getUserData。

我看了相关的代码,似乎没有syncrhonization原语,但是根据我的理解,它是每个线程的本地原语,我认为它应该是线程安全的-只是想知道是否有保证,或者有人有使用它的经验?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 19:20:23

根据我的理解,uWebSockets是基于事件循环的,因此每个线程运行一个事件循环,这意味着(尽管我不确定这是否由uwebsocket保证)用户保持与给定线程的连接,并且所有连续的讨论都在该线程和最终用户之间完成。因此,这意味着对于用户来说,onConnection和onDisconnection方法将始终位于同一线程上。

setUserData可能是线程安全的,uWebSockets不能保证这一点,但可以保证到集线器的onconnection和ondisconnection事件之间的平衡。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52204896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档