0

我们需要创建一个 ListeningDispatcher,它接受来自 N 个客户端的端口 P 上的连接(现在它们是本地的,因此它们仅由端口标识,但稍后可能是地址)。我的方法是进行 .accept() 调用,检索 Socket,启动一个新线程并让它处理来自 Socket 的消息。因此,如果我们的分布式系统中有 n 个客户端(基于广播,具有逻辑令牌环),我将保留 N 个线程,具有 N 个套接字。

我的伙伴认为这会使太多线程保持打开状态,最好在每个新连接上启动一个新线程,而不是保持线程运行,关闭套接字并在收到消息后停止线程。这样,我们将使用更少的线程,但我们必须为每条消息创建一个新的 Socket。

我认为这会降低通信质量,因为打开一个新的 Socket 需要时间。

考虑到系统必须是可扩展的并且具有繁重的通信部分,因为每个事件都被广播到每个客户端。

注意:我们不能使用 ThreadPools

4

2 回答 2

1

我的方法是进行 .accept() 调用,检索 Socket,启动一个新线程并让它处理来自 Socket 的消息。

不要开始一个新线程。使用线程池并重用线程。

这样,我们将使用更少的线程,但我们必须为每条消息创建一个新的 Socket

对于每个客户端,您通过accept. 这句话没有意义

于 2013-05-19T10:05:46.517 回答
0

所以你必须在更少的线程和更少的新连接之间做出决定。你的“伙伴”可能想思考为什么 HTTP keep-alive 被发明了。发明它是为了在可能的情况下重复使用连接,而不是支付创建新连接的成本。

于 2013-05-19T10:23:37.593 回答