【问题标题】:Vb.net Task-Based multiclient tcpserverVb.net 基于任务的多客户端 tcpserver
【发布时间】:2019-05-15 17:38:39
【问题描述】:

我有一个使用多线程同时为多个客户端服务的 tcpserver。它工作得很好,但我在内存管理方面遇到了问题。

最多可以有 1500 个客户端连接到服务器并保持连接数小时和数天。

所以我遇到了“内存不足问题”,因为我必须使用 32 位操作系统。所以我想转换为 64 位操作系统应该保持计划 b。

你建议我做什么?

基于任务的异步 tcpserver 服务于多客户端?

还是继续使用多线程并制作可重复使用的 1500 个线程?

谢谢。

【问题讨论】:

  • 1500 个线程?!您只需要2个。一个线程接收数据并将其放入堆栈,另一个线程处理数据。您可以添加更多处理线程,具体取决于 CPU 可以支持的内容(每个内核 1 个线程)。
  • 好的,但它是一个反作弊服务器系统,就像 1500 个游戏客户端和游戏服务器之间的代理,我必须监听 1500 个客户端和 1500 个游戏服务器 tcp 套接字,我也想要 2 个线程但是如何?如何在一个线程中执行 1500 个客户端 tcp 数据包?我正在找这个。
  • 有没有办法在一个线程中等待多个客户端流?暗流 As NetworkStream = vekil_client.GetStream()
  • 如果您正在等待某事或每个内核一个线程来处理某事,则需要一个线程。我有一段时间没有这样做了,但我认为 Asynchronous Socket 是您正在寻找的。​​span>
  • 找到了,我以前用SocketAsyncEventArgs处理过很多客户。它专门用于高性能套接字应用程序。

标签: vb.net multithreading multitasking tcpserver


【解决方案1】:

只需将“新线程”更改为“新任务”即可解决我的问题。谢谢大家。

New Task(Sub() listen(tcp_client))

【讨论】:

  • New Task 很少是正确的做法,尽管我认为(与您未显示的代码一致)它可能是您特定用例的正确做法。另请参阅blog.stephencleary.com/2014/05/…,一般来说,我强烈推荐同一个博客中关于使用Task 的各种文章。
猜你喜欢
  • 2016-04-18
  • 2013-06-23
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多