假设我有一台通过TCP连接多个客户端的服务器,每个客户端都有一个套接字,每个客户端都有一个发送和接收线程。是否安全且可以同时调用发送功能,因为它不会为同一个套接字调用发送功能。
如果安全可靠,我可以同时将数据流式传输到客户端而不会阻止其他客户端的发送功能吗?
非常感谢您的回答。
答案 0 :(得分:0)
是的,它是可行的和线程安全的。您可以测试它,或者自己解决IS,IIS,SQL Server等不能很好地工作,如果不是。
答案 1 :(得分:0)
假设这是来自“Winsock”标签的Windows。
此设计(对每个连接的客户端都有一个发送/接收线程)总体上不会扩展。希望你知道这一点,你知道你的客户数量非常有限(即便如此,我也不会这样写)。
您不需要为每个客户端都有一个线程对。
使用非阻塞IO和读/写就绪通知(使用select()或其中一种重叠IO(如完成例程或完成端口),您可以使用单个线程为大量客户端提供服务。如果使用完成端口,则可以设置一个线程池来处理套接字IO,并为您自己的工作线程或线程/线程池排队工作。
是的,你可以从不同的线程一次发送和接收到许多套接字;但是你不应该需要那些额外的线程,因为你根本不应该对发送/ recv进行阻塞调用。当您进行非阻塞调用时,会立即写入可以立即写入的金额并返回该函数,然后记下发送了多少并在套接字下次写入时请求通知。
我想你可能想要考虑一种不同的方法,因为这不是简单的事情;如果您正在使用.Net,您可以使用TcpListener或HttpListener构建它(两者都使用完成端口),但请注意,如果您需要交互性,则无法轻松禁用Nagle的算法(想想在谷歌的搜索页面上自动完成)然后你可能无法获得你想要的性能。