如何在不同的动作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轮询比喻
在您尝试这样做之前,您需要考虑一些事情:
- ASP。. NET MVC控制器是无状态的。这意味着每个请求都将创建一个控制器的新实例,并且您将无法跟踪任何状态。每个控制器动作都不知道任何之前的控制器动作,即使在同一个函数中也是如此。这是因为HTTP是无状态的。你可以通过使用SessionState或Singleton或应用程序缓存或数据库或其他东西来跟踪状态。. NET MVC不会为你跟踪事情。
- 多个用户将最终调用相同的控制器代码(相同的网页),你将结束你的代码运行的多个实例。这可能会在代码中引入难以跟踪的bug。换句话说,多个线程调用相同的代码可能会导致严重的问题。
- 如果你最终成功地实现了你的方法,你可能会想要做某种连接或客户端池,因为创建网络连接是昂贵的。
这是一种可能的方法(请谨慎使用,因为我还没有测试或实现这种方法):
- 创建一个静态类,其中包含静态tcpclient对象的列表或数组
- 对该类的所有访问都是同步的或锁定的(请读取信号量,监视器或互斥锁)
这个静态类在你的应用程序中将是一个单独的实例,你需要防止多个线程/用户相互踩到对方。您需要请求TCPClient并在用户会话中跟踪它。这样,每个后续请求都可以查找TCPClient对象并采取任何必要的操作。
陷阱:
- 多线程
- 阻塞- TCPClient数组/列表可能不够大,当太多的用户加载你的网页。
- 否决
- 内存不足错误
- 等。
希望这对你有帮助。好运。