Sockets

Sockets ,sockets,async-await,.net-4.5,tcplistener,Sockets,Async Await,.net 4.5,Tcplistener,哦,信号员会帮你处理的。:) 将消息发送到特定的TCP客户端。我认为自定义TCP会话类中的函数可以发送消息。同样,在异步模型中,我需要创建一个基于计时器的进程来检查消息队列,还是在可以访问TcpClient和关联流的TCP会话类上创建一个事件?我对这里的意见很感兴趣 如果您的服务器可以向任何客户机发送消息(即,它不仅仅是一个请求/响应协议;服务器的任何部分都可以向任何客户机发送消息,而不需要客户机请求更新),那么是的,您将需要一个适当的传出请求队列,因为您无法(可靠地)在套接字上发出多个并发写入

哦,信号员会帮你处理的。:)

将消息发送到特定的TCP客户端。我认为自定义TCP会话类中的函数可以发送消息。同样,在异步模型中,我需要创建一个基于计时器的进程来检查消息队列,还是在可以访问TcpClient和关联流的TCP会话类上创建一个事件?我对这里的意见很感兴趣

如果您的服务器可以向任何客户机发送消息(即,它不仅仅是一个请求/响应协议;服务器的任何部分都可以向任何客户机发送消息,而不需要客户机请求更新),那么是的,您将需要一个适当的传出请求队列,因为您无法(可靠地)在套接字上发出多个并发写入。不过,我不会让消费者基于计时器;有异步兼容的生产者/消费者队列可用(如有)

哦,信号员会帮你处理的。:)

我想为整个服务使用一个线程,并在其中使用非阻塞主体,是否有任何事情我应该特别注意在1的上下文中。手动重置事件等

如果您的整个服务是单线程的,那么您根本不需要任何协调原语。但是,如果您确实使用线程池而不是同步回主线程(出于可伸缩性原因),那么您将需要进行协调。我有一个您可能会发现很有用的示例,因为它的类型同时具有同步和异步API。例如,这允许一个方法在锁上阻塞,而另一个方法希望在锁上异步阻塞



您可能已经注意到围绕信号器的一个反复出现的主题。尽可能使用它!如果必须编写一个简单的TCP/IP服务器,而不能使用SignalR,那么将初始时间估计值增加三倍。认真地然后,您可以开始使用my.

在Internet上搜索“IO Completion Ports.NET”@selbie抱歉,我可能不太清楚,我想用C#完成此操作。你是建议我使用C++还是在.NET中实现IOCP的概念,我只是认为在.NET 4.5中有更简单和性能更好的替代方案。有一个代码项目示例可以做到这一点,但我再次认为事件/任务驱动的方法就足够了。所有异步套接字API都已经使用了IOCP。谢谢,我非常感谢您花时间回答我的问题。在我明天消化这些信息时,请与我保持联系,然后再给你回复。我也会调查Signaler,我没有意识到ASP.NET将是一个合适的竞争者。为了澄清,我需要使用相同的套接字将消息发送回客户端,它们建立的是连接,而不是服务器。您知道构建在SignalR上的任何“TCP”服务器示例吗?我需要访问原始TCP套接字,因为客户端只能通过TCP进行通信,因此我的响应会写回它们的初始连接/套接字。Signal使用WebSocket协议,因此不能与原始TCP/IP客户端一起使用。客户端需要更改为使用Signal(或至少WebSockets)。@Nicholas:对不起,我不理解您的请求。@StephenCleary是否有不使用Signal客户端库的示例?(基本上使用System.Net.WebSocket)