RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1391376
Accepted
Betflop
Betflop
Asked:2022-08-18 22:03:08 +0000 UTC2022-08-18 22:03:08 +0000 UTC 2022-08-18 22:03:08 +0000 UTC

gRPS 如何处理大量连接?

  • 772

我没有找到关于 gRPS 如何处理大量同时连接的正常解释?

是不是需要把前面的nginx web服务器挂掉等等 ? 还是它本身充当 Web 服务器?

我需要自己运行大量线程吗?还是在 gRPS 服务器本身的级别上使用您编写的语言的代码进行配置?

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Pak Uula
    2022-08-19T02:37:11Z2022-08-19T02:37:11Z

    大概在说gRPC。

    gRPC当客户端连接时,服务器会创建一个新套接字并在其上挂起一个消息处理程序。这些处理程序的确切工作方式取决于编程语言。

    这些go是 goroutine,运行时本身go决定在哪些线程中执行它们。因此,go几个连接的处理程序可以并行工作。

    这些python是 Python 线程,但由于 Python 在单线程模式下工作,它们在运行时内切换,事实上,在任何给定时间执行的此类处理程序不超过一个。

    关于 TCP 套接字如何工作的简短教育计划

    由于您有关于“分发到其他套接字”的问题,我将简要描述服务器如何在套接字之上工作。

    TCP 套接字有两种类型——服务器套接字和客户端套接字。客户端可以连接到服务器并可以传输数据。服务器套接字不能传输数据,但它们可以等待来自客户端的连接请求。

    客户端如何连接到服务器。

    在服务器端,程序执行了几个系统调用:bind将套接字绑定到 IP 地址和端口,listen切换到服务器套接字模式,accept等待连接(实际上,通常情况下,它有点复杂,但对于教育计划不是必需的)。

    调用accept被阻塞,直到从客户端收到连接请求。当客户端连接时,内核内部会创建一个客户端套接字来与客户端通信。此套接字附加到服务器进程的文件表,并在调用中返回其文件描述符accept。这个新创建的套接字是一个客户端套接字,即它可以用来监听数据(recv)或发送数据(send)

    接下来发生什么。

    所有服务器的设置方式大致相同。一旦accept客户端套接字返回到服务器代码的荒野中的某个地方,接收数据的处理程序就会与它相关联。当套接字从客户端接收到数据时,服务端基础架构找到处理程序并调用它(这里我故意不写select/ poll)。这就是gRPCWeb 服务器的工作方式。

    限制

    服务器基础设施可以对连接数和流量施加各种限制。

    首先,操作系统内核限制了一个进程打开的文件数量。从操作系统的角度来看,客户端套接字是一个文件,所以这个限制会导致它accept返回一个错误too many open files。我最近遇到了这个。我忘了把它提高到ulimit极限,经过几天的工作,服务器gRPC出现了这个错误。累积的打开文件的数量leveldb以及在某些不确定的时刻哎呀-服务器崩溃了。

    其次,gRPC您使用的库可能会限制连接数。如果它accept返回一个新的套接字并且打开的客户端套接字的数量已经达到了指定的限制,那么新的套接字会在没有附加处理程序的情况下简单地关闭。

    第三,库可以对从套接字接收的数据量施加限制。由于所有使用套接字的工作通常都是封装的,并且处理程序接收现成的数据,因此对于过于活跃的套接字,可以在计时器上访问新数据。比方说,在处理程序完成后的几秒钟内,而不是在完成后立即。

    有关第一个限制,请参阅操作系统文档。特别是在 Linux 上,这是一个ulimit. 第二个和第三个在gRPC您正在使用的库的文档中。

    • 4

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5