繁体   English   中英

多线程服务器,独立发送数据?

[英]Multithreaded server, send data independently?

我正在尝试构建一个简单的多线程tcp服务器。 客户端连接并向服务器发送数据,服务器响应并再次等待数据。 问题是我需要服务器在单独的线程中侦听传入的数据,并能够随时向客户端发送命令(例如,通知有关新的更新)。 据我了解,每当客户端向服务器发送数据时,如果服务器不响应任何数据,客户端应用程序就不会让我发送更多数据,服务器根本就不会接收它们。 如果我发送数据以太方式,tcpclient是否需要“确认”数据?

这是服务器的来源: http : //csharp.net-informations.com/communications/files/print/csharp-multi-threaded-server-socket_print.htm

如何使服务器在“ DoChat”函数循环之外的单独线程中向客户端发送命令? 还是我必须处理该线程中的所有内容? 我必须回应客户发送给我的每个请求吗? 谢谢!

问题是我需要服务器在单独的线程中侦听传入的数据

不,有一个异步API。 您可以轮询线程列表,以查看哪些新数据在等待,显然是在工作者线程中完成的。

据我了解,每当客户端向服务器发送数据时,如果服务器不响应任何数据,客户端应用程序就不会让我发送更多数据,服务器根本就不会接收它们。

这比套接字的工作方式要糟糕得多。 套接字完全可以同时在发送和接收方向上使用流ata。

如何使服务器在“ DoChat”功能之外的单独线程中向客户端发送命令

好的,我的工作很花钱。

但是:这个例子是迟钝的。 作为完全反模式。 每个客户端一个线程? 一旦有1000多个客户端连接,您将遇到存储器问题和性能问题。 您将获得大量上下文切换。

其次,客户端不是异步的,因为它不是这样编写的。 也许我建议您参考文档,读一遍袜子以尝试自己建立它吗? 然后返回的问题多于“我只是尝试复制粘贴”。

通过适当的编程,这是完全正常的。 我在开发中有一个类似的应用程序,它将数据延迟发送到客户端,并从客户端获取命令以修改数据流。 作品让人着迷。

如果我发送数据以太方式,tcpclient是否需要“确认”数据?

是的,没有。 不,不是针对TCP的-TCP在后台进行握手。 是的,如果您的协议决定必须这样做,那是程序员级别的设计决定。 根据数据的内容,它可能是必需的,也可能不是必需的。 有时,确认会提供更多信息(时间戳服务器端,跟踪编号),而并非仅仅针对“我知道”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM