我编写了一个多线程简单服务器,它使用:
clientStream.Read(message, 0, 4096);
阻止直到客户端发送消息。然后代码继续处理该消息。
到目前为止,我只是用它来发送短命令
ex. "#login[username][login]"
但我担心当我通过线路发送大量表格数据时,代码可能会在收到所有代码之前继续。
同样会。收到阻止,直到收到整个发送的消息,或者在任何数据开始接收时是否解锁?
答案 0 :(得分:7)
依靠发送完成来描述消息是不好的形式。如果不是出于最简单的原因。我可以远程登录到您的服务器并轻松崩溃。
您需要创建一个有线协议。你有几个选择。
总是希望将消息的大小视为无符号的32位整数作为前4个字节,然后读取,直到填满该数据量为止。
指定消息结束分隔符。这意味着您将保留缓冲区。您可以通过线路填充数据,快速扫描它以查找消息。找到消息后,将其丢给消息处理器,然后继续使用缓冲区中的左侧字节,重复步骤1.
您可以查看STOMP以获得基于文本的简单协议。
不要依赖于以明确定义好的块发送的数据包作为消息分隔符。