日期:2014-05-17  浏览次数:20865 次

C# 异步Socket接收处理耗时问题
应用场景描述:项目中需要做一个Socket服务端(采用了SocketAsyncEventArg),与1000多个客户端通信。现在客户端会固定每5秒上传一次实时数据到服务端,服务器端对接收到的数据有一个处理过程,大概耗时2秒,处理完后调用e.AcceptSocket.ReceiveAsync()方法重新接收数据。
现在的问题是,如果在这2秒的数据处理过程中,客户端再上传别的数据上来时,服务器端Receive方法是无法接收到这些数据,直到数据处理完后调用e.AcceptSocket.ReceiveAsync()后,才能重新接收数据。
不知道有没有什么好的方法可以让后面上传的数据也可以接收到呢?先感谢各位了。

有人建议我把这2s的数据处理过程放到一个队列中,用一个单独的线程去处理,这样新的数据是可以接收到,但是考虑到是1000多个客户端同时上传数据,如果都放到一个线程中处理,肯定处理不过来,大家帮忙出出点子。。可能我对SocketAsyncEventArg理解还是很深刻。。。望大虾指点迷津
SocketAsyncEventArg 异步socket ?处理数据耗时

------解决方案--------------------
引用:
应用场景描述:项目中需要做一个Socket服务端(采用了SocketAsyncEventArg),与1000多个客户端通信。现在客户端会固定每5秒上传一次实时数据到服务端,服务器端对接收到的数据有一个处理过程,大概耗时2秒,处理完后调用e.AcceptSocket.ReceiveAsync()方法重新接收数据。

既然是异步的不需要等待。事实上你甚至可以先执行e.AcceptSocket.ReceiveAsync然后再执行处理过程,这应该没有任何问题。否则就是你的程序设计得没有并行多线程的能力了。