【发布时间】:2018-05-11 13:51:37
【问题描述】:
简介: 我开发了一个用 C# 开发的服务器(TCP 侦听器)程序,它在特定(恒定)端口的特定(恒定)IP 上运行。该服务器程序接收客户端程序发送的数据包,对其进行处理并将数据包发送回同一个套接字。虽然此服务器的客户端程序数量可能有数百个:
代码示例
while(true)
{
socket = Host.AcceptSocket();
int len = socket.Receive(msgA);
performActivities(msgA); // May take up-to 5 seconds
socket.Send(msgB);
socket.Close();
}
问题: 由于一些关键的业务需求,处理可能需要长达 5 秒的时间,因此在此期间的其他请求会排队,我需要避免这种情况,以便每个请求必须在不超过 5 秒的时间内得到处理。
查询: 我可以让它成为多线程的,但是(如果你发现我是新手,请原谅我):
【问题讨论】:
-
this tutorial 可能是一个好的开始。基本上,您的侦听器可以侦听多个端口,并将通过该特定端口发送到接受的客户端。这将确保到达正确的客户。
-
this video 也可能很有帮助。跳到 15:40 分钟,在 1 分钟内你应该知道它是否可以帮助你。祝你好运
-
一些命名和代码让我想加上我通常的注意事项:TCP 提供双向的字节流。 不是 消息。如果您想要消息,则由您 来引入消息框架或转移到为您发送消息的更高级别的协议。
Receive仅保证在成功时返回至少 一个 字节。所以请注意len,如果您希望msgA实际包含一个完整 消息(而不是多个消息片段),您还有更多工作要做。 -
我会使用 TcpListener 类。它是套接字上的一个薄包装器,非常易于使用,而且您几乎可以免费使用异步(意味着它将并行运行并且您不需要“多线程”stuf)。一个例子在这里:gist.github.com/jamesmanning/2622054
标签: c# tcplistener