触发不同的传感器线程将数据发送到同一个套接字?

Posted

技术标签:

【中文标题】触发不同的传感器线程将数据发送到同一个套接字?【英文标题】:Firing different sensor threads sends data to same socket? 【发布时间】:2017-01-27 17:34:46 【问题描述】:

到目前为止,与我的问题最接近的问题是: How to handle same socket in different threads?

但这对我的追求没有帮助。我有几个传感器线程以随机间隔触发到客户端套接字,客户端套接字又将数据发送到服务器套接字。

但是当传感器线程同时触发时,我会遇到问题,然后这些线程的数据会混淆。我不希望这种行为发生,我希望所有这些线程都被明确地触发,而不会在任何时候在同一点被触发。请给我实现这一目标的方法。我自己似乎想不出一个好的解决方案。

附:我正在模拟一个测试分支环境,其中传感器在不同的线程中触发(就像附加到客户端套接字一样),以向该客户端发送与代理不同主题的数据。当我过去在传感器线程上睡觉时,数据混淆仍然会在稍后的某个时间发生。

【问题讨论】:

如果我没有以有组织的方式提出我的问题,请纠正我 请阅读如何提出好问题文档***.com/help/how-to-ask 另外还不清楚为什么用 MQTT 标记,MQTT 客户端会将多个线程多路复用到到代理的单个传出连接 实际上我将 MQTT 客户端模拟为单独的线程和附加到它的传感器也作为不同的分离线程,所以我将它标记为 mqtt 这是一个测试台环境,其中所有这些 mqtt 客户端都被模拟为附加了传感器的不同线程,也作为独立于该特定 mqtt 客户端触发的单独线程 【参考方案1】:

从概念上讲,这应该很容易,让您的单独线程将您的数据推送到一个独占访问容器(如数组或队列),然后一个单独的线程将数据从您的容器转发到套接字。

这样你一次只有一个线程处理套接字通信。

【讨论】:

是的,但是如果两个线程同时触发到同一个客户端套接字到同一个服务器套接字时发生冲突,我该如何避免冲突 实际上坦率地说,我正在使用 paho 客户端发布或订阅消息,所以我真的不知道如何调整这种行为 我不明白你的意思,在我提出的场景中,数据将从单个线程以完美的顺序发送到服务器。 好的,我的意思是我在不同线程中向 mqtt 客户端发射传感器,该客户端在单独的线程中运行,因此可能会出现 2 个或多个传感器线程可能同时发布数据,从而导致数据混合的情况。我该如何避免这种情况 正如我所说,通过将其序列化到独占访问容器。这里的问题是您不知道如何使用互斥锁吗?或者添加到数组中? 究竟你在实现它时遇到了什么困难?

以上是关于触发不同的传感器线程将数据发送到同一个套接字?的主要内容,如果未能解决你的问题,请参考以下文章

Python Socket接收/发送多线程

Linux socket使用多线程发送

我们如何在 UI 线程中创建处理程序以将数据发送到另一个线程

如何将实时坐标从位置文件发送到python中的不同文件?

C中的服务器/套接字编程:数据未正确发送/接收?

获取服务中的调用上下文