处理客户端->服务器连接(最大数量和最佳做法)

时间:2019-06-30 18:26:46

标签: java linux multithreading tcp threadpool

我正在为 android应用->通过TCP服务器通信设计架构。这将是基于TCP的自定义应用程序协议...我熟悉网络编程,但是我在Java方面工作不多(即使是Java问题,这也是更普遍的问题)-我工作也不多客户端数量不确定的应用程序(在这种情况下,取决于您拥有多少个android应用程序用户)。 因此,我几乎没有疑问和疑问。

场景:

  • 用户将安装android应用程序并登录
  • 登录后,他们将与服务器建立TCP连接
  • 很明显,服务器端实现需要并行处理请求
  • 考虑到,客户端和服务器端都将使用Java实现
  • 让我们认为该应用程序确实很成功-它具有300万以上的安装量-这意味着很多用户(是的,不错:))

问题: 实现服务器端以处理此类应用程序的客户端连接的最佳方法(最佳实践)是什么?

根据我的研究,您只有三种可能的方法:

  1. 使用线程池
  2. 每个tcp连接使用一个线程
  3. 在Java中使用线程池和非阻塞异步方法(类似于nodejs对libuv所做的工作)

编辑:

详细说明:

1。仅使用一个线程池在这里似乎“很奇怪”,因为事实是我们需要一个庞大的线程池才能为每个tcp连接分配线程。使用线程池来服务例如http请求(在请求完成后将关闭tcp连接),这似乎是个好主意..但对于将要使用较长时间的tcp连接却不是)

2。每次每次为TCP连接创建一个线程-似乎也很受限制(Why is creating a Thread said to be expensive?

Java threads are implemented as native threads and huge numbers of threads is the wrong way to write a practical Java application. 我想当然,这取决于您通常拥有哪种类型的应用程序。

3。在Java中使用线程池和非阻塞异步方法(类似于nodejs对libuv的操作)。

根据我阅读的内容(到目前为止也提出了建议),这似乎是最好的方法。也许是因为我对这类应用程序有更多的经验(nodejs不阻塞单线程工作程序)-但似乎是最好的解决方案。

也许有一些方法-我不熟悉的做法-可以使此过程更有效?

您可以为此类应用程序建议任何资源(书籍或类似书籍)吗?

注意:请注意,我了解到,我可以使用一些我已经熟悉的方法使此过程更有效-例如,当应用程序进入后台时关闭tcp连接-并在重新建立连接时建立连接用户再次使用该应用程序且类似(但这当然取决于应用程序本身)。

我想知道,我是否在这里遗漏了一些东西?如果您想拥有大量用户-以及大量tcp连接-您将需要为每个用户使用一个线程(或上面提到的其他方法)。

我经历过的其他资源:

  1. Max number of threads - Linux
  2. Increase number of threads - JVM
  3. Max number of threads allowed to run
  4. Runnable vs Thread

  5. ...和其他外部资源

0 个答案:

没有答案