如何在不同的动作MVC中初始化和关闭TCPClient.净c#

本文关键字:初始化 TCPClient MVC | 更新日期: 2023-09-27 18:06:47

我试图创建一个MVC。Net Controller,它将在一个操作中启动TCPClient。在另一个操作中读取最新的结果,并在最后一个操作中关闭TCPClient。但是我不知道从哪里开始。

TCPClient应该是类的对象吗?

这里有一些说服代码,我认为我需要如何开始,但我无法将我的头脑围绕着这个想法,帮助将是感激的

public class Foo : Controller
{
    TCPClient myClient = new TCPClient();
    public bool StartClient(string ip, int port)
    {
    }
    public string readMostRecentPacket()
    {
    }
    public bool StopClient()
    {
    }
}

我试图避免潜在地使用TCP连接,因为在单个操作中创建和关闭客户端会在使用这是AJAX轮询比喻

如何在不同的动作MVC中初始化和关闭TCPClient.净c#

时开始拒绝连接

在您尝试这样做之前,您需要考虑一些事情:

  1. ASP。. NET MVC控制器是无状态的。这意味着每个请求都将创建一个控制器的新实例,并且您将无法跟踪任何状态。每个控制器动作都不知道任何之前的控制器动作,即使在同一个函数中也是如此。这是因为HTTP是无状态的。你可以通过使用SessionState或Singleton或应用程序缓存或数据库或其他东西来跟踪状态。. NET MVC不会为你跟踪事情。
  2. 多个用户将最终调用相同的控制器代码(相同的网页),你将结束你的代码运行的多个实例。这可能会在代码中引入难以跟踪的bug。换句话说,多个线程调用相同的代码可能会导致严重的问题。
  3. 如果你最终成功地实现了你的方法,你可能会想要做某种连接或客户端池,因为创建网络连接是昂贵的。

这是一种可能的方法(请谨慎使用,因为我还没有测试或实现这种方法):

  1. 创建一个静态类,其中包含静态tcpclient对象的列表或数组
  2. 对该类的所有访问都是同步的或锁定的(请读取信号量,监视器或互斥锁)

这个静态类在你的应用程序中将是一个单独的实例,你需要防止多个线程/用户相互踩到对方。您需要请求TCPClient并在用户会话中跟踪它。这样,每个后续请求都可以查找TCPClient对象并采取任何必要的操作。

陷阱:

  1. 多线程
  2. 阻塞- TCPClient数组/列表可能不够大,当太多的用户加载你的网页。
  3. 否决
  4. 内存不足错误
  5. 等。

希望这对你有帮助。好运。