根据此博客,Mosquitto(MQTT经纪人)现在支持通过Web套接字连接到客户端。该博客文章似乎暗示Web套接字对浏览器应用程序更有用,因为Web浏览器尚不支持正确的TCP套接字(尽管),尽管大多数现代浏览器都支持Web套接字协议。
如果我在网络中只有多个客户端(例如,基于Raspberry Pi等微控制器的传感器和执行器),使用Web套接字比直接TCP连接有任何优势吗?仅当与浏览器进行通信时,Web套接字协议的开销才值得吗?
根据此博客,Mosquitto(MQTT经纪人)现在支持通过Web套接字连接到客户端。该博客文章似乎暗示Web套接字对浏览器应用程序更有用,因为Web浏览器尚不支持正确的TCP套接字(尽管),尽管大多数现代浏览器都支持Web套接字协议。
如果我在网络中只有多个客户端(例如,基于Raspberry Pi等微控制器的传感器和执行器),使用Web套接字比直接TCP连接有任何优势吗?仅当与浏览器进行通信时,Web套接字协议的开销才值得吗?
Answers:
这里的问题似乎是“我应该在TCP上使用MQTT,还是在websockets(也通过TCP)上使用MQTT?” 换句话说,“将MQTT封装在websockets协议中是一个好主意吗?”
这(几乎)完全取决于您的应用程序以及您是否需要Websockets支持-可能是为了在浏览器中使用消息或出于防火墙原因。如果您无法通过端口1883或更高的8883上的纯MQTT访问服务器,那么websockets可能是您的最佳选择。
Websocket确实需要额外的带宽,但是这对您是否重要只有您可以回答。
还值得注意的是,在当前版本的Mosquitto中,Websocket不能很好地工作,因此在发送/接收Websockets消息时可能会有额外的延迟。不过,这在将来的版本中将不会成为问题。
当你只是内部连通的网络(内网),采用纯TCP将被罚款。但是,如果必须连接到另一台服务器,则会出现问题。
因为大多数现代服务器不允许客户端通过随机端口进行连接。它们仅允许某些专用端口进行连接。就这样。因此,如果必须连接到另一台服务器,最好使用websocket而不是纯TCP连接。
如果您正在考虑开销,那不会太大。如果您想进一步了解Websocket的开销,可以参考本文。
我个人认为,最好始终使用websocket,除非您有一些严重的顾虑。
tl; dr- 始终喜欢使用免费库对自己进行编码(除非您有极端要求)
我应该使用Mosquitto的Web套接字还是直接连接客户端?
一段绳子有多长?(YMMV)
我只能说一般,但是我总是更喜欢包装库而不是原始套接字(或者,实际上,是对我可以从库中免费获得的任何东西进行编码)。
它们使编码更简单,错误更少。他们负责大量的内部管理和错误处理,这是您必须自己编写和调试的代码,因为通常对库进行充分的审查和测试,并且有成千上万的其他人正在使用它们。将为您报告/修复错误。
此外,您维护(以及可能移植)的代码更少,这意味着您有更多时间来开发,测试和完善您的应用程序,或者继续进行下一个应用程序。
如果您接受了所有图书馆员的善意(错误处理,软管维护等),那么您可以说只有一个开销就是函数调用,您必须自己编写代码才能获得良好,稳定的软件。
如果您担心性能,只需配置文件即可。但是,除非您的套接字每秒活动数百次,否则我什至不会打扰。