这更多的是一个设计问题。我有以下实现
多个客户端连接->服务器->对应的数据库连接
客户端/服务器的通信是使用web套接字完成的。它目前是一个单线程应用程序。显然,这种设计不能扩展,因为服务器上的负载太高,返回客户端的响应时间太长。后端操作涉及处理大量数据。
我的问题是:为每个web套接字连接创建一个新线程是个好主意吗?这意味着500个客户端需要500个线程(无论是多线程还是单线程,web套接字的数量都是相同的)。这将减轻服务器上的负载,因此将使生活变得更容易。
或
有没有更好的逻辑来实现可伸缩性?其中之一可以是根据作业的优点创建线程,并由主线程处理其余的线程。不知何故,这似乎会在未来再次回到同一个问题上。
这里的任何帮助都将不胜感激。
发布于 2015-07-08 22:01:59
你可以看看两个非常好的可伸缩的web服务器,Apache和Node.js。
当在多线程(工作者)模式下运行时,Apache将为新连接创建新线程(请注意,来自同一浏览器的请求通过keep-alive从同一线程提供服务)。
Node.js非常不同,它通过委托任务来使用异步工作流。
因此,Apache对于计算密集型任务具有很好的伸缩性,而Node.js对于多个(巨大的)小的、基于事件的请求具有很好的伸缩性。
你提到你在后端做一些繁重的任务。这意味着您应该创建多个线程。多么?创建具有MAX_THREADS限制和MAX_THREADS_PER_CLIENT限制的线程队列,为使用同一线程的客户端重复请求提供服务。你的主线程只能产生新的线程。
如果可以,您还可以整合一些好的Node.js特性。如果线程上的某个任务花费的时间太长,请使用任务的回调终止该线程,以便在该任务完成时创建一个新的线程。你可以做一个基准测试,甚至训练一个神经网络来找出什么时候这样做!
祝你玩得开心!
https://stackoverflow.com/questions/31294712
复制相似问题