lighttpd/mod_websocket mqtt握手失败(无子TO)

lighttpd/mod_websocket mqtt握手失败(无子TO),websocket,lighttpd,mqtt,Websocket,Lighttpd,Mqtt,我已经用mod_websocket设置了lighttpd,正如Dom Bramley的博客文章中所讨论的(除了我使用的是带Debian喘息的BeagleBone Black而不是rPi。) [在lighttpd/mod_websocket构建过程中,有人问我是否要修补服务器,我说是的。] 我在同一台主机上运行MQTT代理,并发布各种主题 当我尝试通过web套接字通过浏览器客户端连接到代理时,我可以看到在http升级到websocket并将连接请求转发到mosquitto方面一切正常。Mosqu

我已经用mod_websocket设置了lighttpd,正如Dom Bramley的博客文章中所讨论的(除了我使用的是带Debian喘息的BeagleBone Black而不是rPi。)

[在lighttpd/mod_websocket构建过程中,有人问我是否要修补服务器,我说是的。]

我在同一台主机上运行MQTT代理,并发布各种主题

当我尝试通过web套接字通过浏览器客户端连接到代理时,我可以看到在http升级到websocket并将连接请求转发到mosquitto方面一切正常。Mosquitto获取连接请求并接受它。但是,返回到浏览器的响应不包括响应原始升级请求中的子to说明符mqttv3.1的Sec Websocket协议头。客户端正确地拒绝此回答,并且连接被关闭

mqttws31.js:912中的javascript错误是“发送了非空的Sec Websocket协议头,但没有收到响应”;101交换协议响应的标题为Upgrade、Connection和Sec Websocket Accept,除此之外没有其他内容

我的mod_websocket config文件定义了主机、端口、类型和subto,与Dom的示例相同,我可以从各种调试语句中看出,请求一直正确地到达mosquito


有人能建议如何在响应中包含Websocket协议头吗?“这一定行得通,”多姆写了一篇博客描述他是如何做到的

我认为mod_websocket的最新版本破坏了/删除了对子脚本的支持,但目前无法确认。您可以尝试早期版本,或者使用专用的websocket连接到tcp网关,如WSS

mod_websocket的作者(Norio Kobota)通过更新mod_websocket,为我快速有效地解决了这个问题。该修复程序目前位于开发分支中,可在github上使用。我们的讨论是这个主题的一部分

简单地说,在连接时间协议协商方面,我使用的用例(预先编写的客户机库和现有的TCP后端)远不如您自己的客户机和服务器组合灵活。然而,在我的例子中,我并不需要任何灵活性或与后端的协商,因此mod_websocket可以只响应它所给出的配置,而不必深入了解子策略的细节

更新后的mod_websocket在websocket握手期间从其配置文件中回显substo条目,这满足MQTT客户机库的要求

所以现在我有两个解决方案用于websocket客户端和TCP后端之间的适配器!谢谢大家的帮助


Doug Johnson

如果您在使用mod_websocket时遇到太多问题,您可以使用node或php或任何您正在使用的语言来创建自己的websocket。WSS是一个很好的建议。请务必使用最近修改过的
tls
分支来支持子目录。可能特别感兴趣。@ralight:您被删除的想法是对的。关于这个()的一个线程的结论是“在mod_websocket 2.9版上不再处理subto,也不需要在TCP模式下处理subto。”我不知道为什么不需要协议协商,这对我来说似乎非常重要!是的,有用的线程。我将看看如何使用WSS。lighttpd/web_-socket似乎是因为不支持subto而将MQTT割让给了其他人吗?删除支持似乎是一个非常愚蠢的决定,但我知道什么!这肯定不仅仅会给MQTT带来问题。我在web_套接字上打开了一个问题,也许我们可以从中看到一些背景信息。