-2

我正在一个系统中工作,该系统必须从许多 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;
            }
         }   
     }

所有设备将一直在传输信息。

非常感谢,

4

1 回答 1

0

I/O 完成端口

I/O 完成端口为在多处理器系统上处理多个异步 I/O 请求提供了一个高效的线程模型。

处理许多并发异步 I/O 请求的进程可以通过将 I/O 完成端口与预先分配的线程池结合使用,而不是通过在接收 I/O 请求时创建线程来更快、更有效地完成此操作。

于 2013-10-03T19:20:49.643 回答