Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Network
MQTT 疑问
发布于 2018-10-17 14:23:31 浏览:1967
订阅该版
在MQTT例程里面,定义的结构体MQTTClient,结构体成员sock和pub_sock有什么区别?paho_mqtt_thread中pub_sock 执行了socket()和bind()操作,但没有找到listen()和accept()执行,在线程循环中就使用了select()函数对read监听,不是很理解,希望大神帮忙指点。
查看更多
9
个回答
默认排序
按发布时间排序
我夏了夏天
认证专家
2018-10-17
Life isn't about finding yourself, life is about creating yourself.
设备端作为客户端并不需要处理来自其他设备的连接,只需要连接服务器,所以并不需要 listen() 和 accept() 函数。
简简单
2018-10-17
这家伙很懒,什么也没写!
设备端作为客户端连接服务器不是net_connect(C)中对c->sock执行的操作吗?c->pub_sock的操作感觉像是充当的服务端。
aozima
2018-10-17
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
sock才是MQTT的TCP长连接。 paho_mqtt_udp.c中的pub_sock是一个本地UDP,和MQTT无关。 pub_sock用来接收本地其它线程需要publish的消息。 新版的RT-Thread,pipe也支持select,所以用一对pipe来取代了 pub_sock。 请参考 paho_mqtt_pipe.c
简简单
2018-10-17
这家伙很懒,什么也没写!
感谢 ,大致理解了!再研究研究
hurryddddd
2019-06-19
这家伙很懒,什么也没写!
>sock才是MQTT的TCP长连接。 > >paho_mqtt_udp.c中的pub_sock是一个本地UDP,和MQTT无关。 --- 同问哈,PIPE和UDP这两种模式区别是啥呢?只看代码不太好理解,当初这么设计的目的是什么,这两种模式分别用在什么场景下呢? 还望大神能指点一二,最近在研究使用MQTT,谢谢了
aozima
2019-06-19
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>PIPE和UDP这两种模式区别是啥呢? --- 目的都是为了让select同时处理2个fd,因为mqtt的收和发都是用同一个tcp 连接。 早期版本的RT-Thread不支持把socket和文件描述符同时监听。 所以就用一个UDP socket来解决。 现在支持把网络fd和文件fd同时放一起select了,所以就可以用pipe 你看这个目录下的scons脚本是如何 自动选择文件的就明白了。 为什么要这么做? 因为你在 recv(fd 来接收服务器消息时,如果服务器不给你发消息,那么你就会一直卡在这个函数 里面 如果你这里要主动向服务器发消息怎么办呢? 需要有个其它的人来主动中止你的recv. 而select就可以同时监听一堆fd是否有动静。如果本地需要主动发消息,向这个pipe或udp socket发数据就可以了。 两种实现方法,对用户的应用程序来说没区别。
hurryddddd
2019-06-19
这家伙很懒,什么也没写!
>目的都是为了让select同时处理2个fd,因为mqtt的收和发都是用同一个tcp 连接。 >早期版本的RT-Thread不支持 ... --- 谢谢了,思路算算滤清了:就是我如果有其他线程想要pub,调用顺序为paho_mqtt_publish-->MQTT_local_send-->write(c->pub_pipe[1], data, len),往pipe里写入数据;在paho_mqtt_thread中监听的select(pipe,..)就会被唤醒,可读事件被触发,然后开始真正的往服务器发布数据 但是这里有个问题: 1、pub的时候是往pipe[1]的fd里写数据,而select监听的是pipe[0]的数据,这个地方怎么理解呢?
aozima
2019-06-19
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
这是pipe的特性,读写分开的。
hurryddddd
2019-06-20
这家伙很懒,什么也没写!
>这是pipe的特性,读写分开的。 --- 嗷嗷,谢谢了。感觉这要深入理解代码的话,还有很多知识需要补啊
撰写答案
登录
注册新账号
关注者
0
被浏览
2k
关于作者
简简单
这家伙很懒,什么也没写!
提问
4
回答
6
被采纳
1
关注TA
发私信
相关问题
1
lwip1.4.1连接经常会断开无法连接上,可以ping通
2
LPC1768:RTT+LWIP+webserver用IE刷网页出现硬件中断错误(已经解决)
3
求一些LWIP开发的经验,目前ping一直不稳定。
4
stm32f207+dp83848无法ping通
5
RTT下的LWIP传递机制
6
rtt内lwip的socket是否是线程安全?
7
Lwip+enc28j60无法ping通
8
坑爹的rtconfig.h lwip关掉了checksum
9
花了一个晚上,把RT2.0的LWIP、网卡驱动、文件系统整合起来了,发现一点小问题
10
lwip例程中udp发送时如何指定源端口发送到指定目的地端口
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
2
GD32F450 片内 flash驱动适配
3
STM32H7R7运行CherryUSB
4
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
5
使用RC522软件包驱动FM1722
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部