gpt4 book ai didi

java - 存储大量套接字的最佳做法是什么?

转载 作者:IT王子 更新时间:2023-10-29 06:07:50 25 4
gpt4 key购买 nike

出于测试目的,我想创建一个套接字服务器,它将包含 10+ 百万个并发套接字连接,分布在 AWS 上 X 数量的 ec2 实例上(仍然决定使用 JXCore、Java 或 Erlang 的 node.js)。这些套接字将每 10 秒随机向另一个套接字发送消息。我只是无法理解如何有效地存储和读取这些套接字。

我可以看到的两个选项是将套接字对象存储在应用程序本身的 map 之类的东西中,或者将套接字存储在快速数据库(如 Redis)中。将套接字存储在应用程序内部的数据结构中的问题在于它是否能够扩展、健壮,以及当数百万个套接字需要相互查找时读取性能如何。如果我将它们存储在诸如 redis 之类的数据库中,则每次都必须进行网络调用,因为套接字 A 需要知道套接字 B 的位置才能发送消息。我担心这会大大降低性能。

我想知道可扩展套接字服务器的最佳实践是什么,因为我在互联网上找不到任何可以回答这个问题的东西。我在网上找到的每个套接字服务器都向每个其他套接字进行简单广播,而不是具有特定的套接字,并且只包含大约 10 个套接字。

最佳答案

如果您希望此应用程序分布在多个 Node 上,则至少需要一种方法来确定目标 Node 。如果它可能是源和当前数据包的纯函数,则不需要中央存储,这是最好的解决方案。

在其余情况下,中央存储是不可避免的,但可以应用一些优化来减少对它的访问。本地套接字可以很容易地存储在本地映射中(erlang 中的 ets 或 mnesia,其他语言中的共享单例映射)并首先进行检查。源可能被告知缓存目标地址,因此数据包将包含所有必要的信息。或者该目标缓存可以存储在源套接字 Node 上以不依赖于客户端行为。此缓存可用于路由,并且仅当路由操作不成功时才可以访问中央存储。

可能还有其他一些优化,具体取决于您的情况。

关于java - 存储大量套接字的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23689605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com