我正在一个系统中工作,该系统必须从许多 TCP 设备(超过 3000 个设备)接收信息,该系统必须打开所有连接,因为设备发送警报并且您必须实时向 GUI 显示事件。
我已经让系统使用一个线程来扫描处理与设备连接的每个套接字,但是我遇到了性能问题,因为处理器无法处理所有这些线程。
如何在不丢失任何事件或信息且不使处理器过载的情况下管理所有打开的连接?
我TcpListener.AceptSocket
用来接受连接。然后我Thread
为这个方法创建一个新的
private void StartTalk()
{
DelgateText hand =new DelgateText(text_texbox1);
string Line = "";
while (_Cliente.Connected)
{ try
{
bool cb = _Cliente.Poll(100, SelectMode.SelectError);
_Cliente.ReceiveTimeout = 1000;
bool part1 = _Cliente.Poll(1000, SelectMode.SelectRead);
bool part2 = (_Cliente.Available == 0);
if (part1 & part2)
{
_Cliente.Disconnect(true);
offlineClient(this,new Events(false,_Cliente));
delagateRemovenik handlerR = new delagateRemovenik(removeCliente);
handlerR(_Cliente);
delagteList handlist = new delagteList(ActiveClients);
ModuloComunicacion ServerActiv = ModuloComunicacion.InstanceModuleComunication;
handlist(ServerActiv.GetOnlineClient());
break;
}
else {
if(_Cliente.Available>0)
{
byte[] ReaderData = new byte[_Cliente.Available];
string mensj = System.Text.Encoding.ASCII.GetString(ReaderData, 0, _Cliente.Receive(ReaderData));
int x0 = _Cliente.ReceiveBufferSize;
Line = mensj;
hand(_Cliente.RemoteEndPoint.ToString() + "-->" + Line);
}
}
}
catch (Exception ex)
{
ex.ToString();
break;
}
}
}
所有设备将一直在传输信息。
非常感谢,