TCP / IP框架,穿插消息

时间:2015-01-29 16:26:00

标签: c# asp.net .net tcp

我只是深入研究.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请求基本上都在自己的线程中,这是可能的。这可能是一种情况吗?如果是这样,你怎么知道哪个字节与哪个消息有关?或者我只是对整个事情感到困惑?

谢谢!

1 个答案:

答案 0 :(得分:2)

将数据发送到客户端的代码必须调节在套接字上发送的数据。

如果您有多个线程都使用相同的连接,请使用套接字流上的锁并保持锁定直到消息完全发送,这将使其他线程不会导致混合消息。

另一种方法是从消息队列中读取一个专用线程并将其发送出去,然后将每条消息放到队列中,并在处理完毕后发送。