所以我有一个套接字服务器在 asp.net ( C# ) 应用程序中运行(非常糟糕的方法),它通知任何连接的设备, 就像我刚开始在这家公司工作的时候,改变它并不是我的主管优先考虑的事情,尽管它会更好。
因此,当我们对网站进行更新时,套接字连接保持打开状态(在另一个线程中),然后我们必须重新启动服务器,但我想做的是在启动时以某种方式获取线程 ID Socket,然后存储它,如果更新完成,它应该重新附加到该线程并以某种方式结束 Socket 或重置它。
这可能吗?
这是示例代码
private void Start()
{
_socketServer = new TcpListener(IPAddress.Any, Convert.ToInt32(ConfigurationManager.AppSettings["NotificationSocketPort"]));
_socketServer.Start();
_acceptingThread = new Thread(() =>
{
while (true)
{
try
{
var client = _socketServer.AcceptTcpClient();
StartClient(client);
}
catch (ObjectDisposedException ex)
{
_acceptingThread = null;
_socketServer = null;
Start();
break;
}
}
});
_acceptingThread.Start();
}
public void Close()
{
if (_acceptingThread != null)
{
_acceptingThread.Abort(0x0);
_socketServer.Stop();
_acceptingThread = null;
_socketServer = null;
}
}
在global.asax中
protected void Application_End(object sender, EventArgs e)
{
SocketNotifier.GetNotifierInstance().Close();
}
SocketNotifier 使用单例设计模式
最佳答案
坦白说,这是错误的做法。 Web 应用程序会重新启动,并且应该会重新启动。套接字不喜欢这样,也不应该期望这样。这里最好的选择是将套接字代码重写为 Windows 服务 - 这样它就可以独立于网络应用程序继续运行。
关于c# - 重新连接 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325451/