求解答Socket线程问题
Socket服务端启动Listen后,调用BeginAccept方法等待客户端连接,当客户端连接成功后,调用BeginReceive方法,然后继续调BeginAccept方法,BeginReceive在执行回调事件的最后继续等待接收,这样的话,是不是就是说,如果我有1W个客户端长连接服务端,服务端就要有1W个线程来做这个工作呢。
Socket socket...
socket.Listen(10);
socket.BeginAccept(new AsycCallBack(AcceptCallBack),null);
private void AcceptCallBack(IAsyncResult ar)
{
Socket handler = socket.EndAccept(ar);
AsySocket NewSocket = new AsySocket(handler);
//激发事件
socket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
//重新监听
mSocket.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
private void ReceiveCallback(IAsyncResult ar)
{
try
{
//
StateObject state = ar.AsyncState as StateObject;
//读取数据
int bytesRead = mSocket.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(UTF8Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
string sb = state.sb.ToString();
if (sb.Length>0)
{
//接收完成
//激发事件
if (onStreamData != null)
onStreamData(mID, UTF8Encoding.UTF8.GetBytes(sb));
if (onStringData != null)
onStringData(mID, sb);
//
state = new StateObject();
state.workSocket = mSocket;
}
// Get the rest of the data.
mSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
}
catch (SocketException se)
{
if (onClosed != null)
onClosed(ID,se.Message);
}
catch (Exception e)
{
throw new ApplicationException(e.Message);
}
}