首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用websockets进行多线程

使用websockets进行多线程
EN

Stack Overflow用户
提问于 2015-07-08 21:49:04
回答 2查看 14.2K关注 0票数 6

这更多的是一个设计问题。我有以下实现

多个客户端连接->服务器->对应的数据库连接

客户端/服务器的通信是使用web套接字完成的。它目前是一个单线程应用程序。显然,这种设计不能扩展,因为服务器上的负载太高,返回客户端的响应时间太长。后端操作涉及处理大量数据。

我的问题是:为每个web套接字连接创建一个新线程是个好主意吗?这意味着500个客户端需要500个线程(无论是多线程还是单线程,web套接字的数量都是相同的)。这将减轻服务器上的负载,因此将使生活变得更容易。

有没有更好的逻辑来实现可伸缩性?其中之一可以是根据作业的优点创建线程,并由主线程处理其余的线程。不知何故,这似乎会在未来再次回到同一个问题上。

这里的任何帮助都将不胜感激。

EN

Stack Overflow用户

发布于 2015-07-08 22:01:59

你可以看看两个非常好的可伸缩的web服务器,ApacheNode.js

当在多线程(工作者)模式下运行时,Apache将为新连接创建新线程(请注意,来自同一浏览器的请求通过keep-alive从同一线程提供服务)。

Node.js非常不同,它通过委托任务来使用异步工作流。

因此,Apache对于计算密集型任务具有很好的伸缩性,而Node.js对于多个(巨大的)小的、基于事件的请求具有很好的伸缩性。

你提到你在后端做一些繁重的任务。这意味着您应该创建多个线程。多么?创建具有MAX_THREADS限制和MAX_THREADS_PER_CLIENT限制的线程队列,为使用同一线程的客户端重复请求提供服务。你的主线程只能产生新的线程。

如果可以,您还可以整合一些好的Node.js特性。如果线程上的某个任务花费的时间太长,请使用任务的回调终止该线程,以便在该任务完成时创建一个新的线程。你可以做一个基准测试,甚至训练一个神经网络来找出什么时候这样做!

祝你玩得开心!

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31294712

复制
相关文章

相似问题

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