我只是深入研究.NET中的一些TCP / IP套接字编程,并且我开始了解如何使用消息框架来区分消息""在TCP / IP数据流中,例如使用消息开始和结束分隔符。
但是,如果消息字节相互散布,我无法解决所发生的事情。考虑以下情况(我甚至不确定这种情况是否有意义,所以如果我误解了某些内容,请告诉我):
规则1:Web服务在收到新的HTTP请求时必须向特定客户端发送TCP / IP消息。
规则2:Web服务将通过TCP / IP发送到客户端的消息将采用ASCII格式,消息将为" + MESSAGE_TEXT |",加号为消息开始分隔符和管道符号作为消息结束分隔符。
规则3:在客户端中,每个字节将在收到时进行检查,并在收到消息时启动'分隔符,它将开始使用ASCII编码的消息填充新字符串。当消息“结束”时收到分隔符,它将知道消息已完成并处理它。
场景:Web服务同时接收两个HTTP请求,这会导致两条消息通过TCP / IP发送到客户端,当接收并重新组合字节时,它们看起来像这样(ASCII编码):&# 34 + ME + MESSSSAGE_AGESTART | _start |"
。我意识到实际上是"同时发生的HTTP请求"相对较少,但由于每个HTTP请求基本上都在自己的线程中,这是可能的。这可能是一种情况吗?如果是这样,你怎么知道哪个字节与哪个消息有关?或者我只是对整个事情感到困惑?
谢谢!
答案 0 :(得分:2)
将数据发送到客户端的代码必须调节在套接字上发送的数据。
如果您有多个线程都使用相同的连接,请使用套接字流上的锁并保持锁定直到消息完全发送,这将使其他线程不会导致混合消息。
另一种方法是从消息队列中读取一个专用线程并将其发送出去,然后将每条消息放到队列中,并在处理完毕后发送。