-
Type:
New Feature
-
Status:
Closed
-
Priority:
Major
-
Resolution:
Fixed
-
Affects Version/s:
3.1.1
-
-
-
-
-
Proposal:
Hide
Add an Appendix to describe MQTT protocol over websocket connections.
MQTT can be transported over a WebSocket connection using the following conventions:
- WebSocket binary frames are used. A single frame may contain multiple or partial MQTT Control Packets; they are not required to be aligned.
- The WebSocket Protocol Name consists of the MQTT Protocol Name concatenated with the ASCII representation of the MQTT Protocol Version number. For MQTT v3.1.1, this will be "MQTT4".
- No restriction is placed on the path portion of the WebSocket url
Note to editors: need to add references to the WebSocket RFC
Show
Add an Appendix to describe MQTT protocol over websocket connections.
MQTT can be transported over a WebSocket connection using the following conventions:
WebSocket binary frames are used. A single frame may contain multiple or partial MQTT Control Packets; they are not required to be aligned.
The WebSocket Protocol Name consists of the MQTT Protocol Name concatenated with the ASCII representation of the MQTT Protocol Version number. For MQTT v3.1.1, this will be "MQTT4".
No restriction is placed on the path portion of the WebSocket url
Note to editors: need to add references to the WebSocket RFC
Constraints and considerations for flowing MQTT binary protocol over a Websocket, RFC 6455.
See also http://wiki.eclipse.org/Paho/Paho_Websockets
Making MQTT over Websockets inter-operable:
Must support WebSockets as defined by RFC 6455
Must use websocket binary frames.
This enables MQTT v3,1 per the specification to flow over websockets with no change to the MQTT packets
Must use "mqttv3.1" as the websocket protocol name.
This is applicable when creating the websocket: e.g. new WebSocket(wsurl, 'mqttv3.1')
The path portion of the url specified on the MQTT connect should be "mqtt"
For instance ws://m2m.eclipse.org:800/mqtt . mqtt should be the default with the option for an alternative to be configured / specified
Open points for further discussion:
Should an MQTT packet be aligned with a WebSocket frame? Should MQTT Protocol messages be sent exactly one per frame or should the framing be arbitrary with multiple or partial MQTT messages per frame with no frame alignment.?
{"report":{"apdex":1,"isInitial":true,"journeyId":"8c3f10f8-ab6b-4306-860a-ed612c778bc6","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":654.0999999046326,"redirectCount":0,"resourceLoadedEnd":599.5,"resourceLoadedStart":153.2999997138977,"resourceTiming":[{"duration":96,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":153.2999997138977,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":153.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":249.2999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":96,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":153.69999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":153.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":249.69999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":97.2999997138977,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":154,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":154,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":251.2999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":97.2999997138977,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":154.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":154.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":251.39999961853027,"responseStart":0,"secureConnectionStart":0},{"duration":97.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":154.39999961853027,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":154.39999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":251.89999961853027,"responseStart":0,"secureConnectionStart":0},{"duration":148.09999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":154.59999990463257,"connectEnd":154.59999990463257,"connectStart":154.59999990463257,"domainLookupEnd":154.59999990463257,"domainLookupStart":154.59999990463257,"fetchStart":154.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":154.59999990463257,"responseEnd":302.69999980926514,"responseStart":302.69999980926514,"secureConnectionStart":154.59999990463257},{"duration":160.80000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":155.19999980926514,"connectEnd":155.19999980926514,"connectStart":155.19999980926514,"domainLookupEnd":155.19999980926514,"domainLookupStart":155.19999980926514,"fetchStart":155.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":155.19999980926514,"responseEnd":316,"responseStart":316,"secureConnectionStart":155.19999980926514},{"duration":162.90000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":155.39999961853027,"connectEnd":155.39999961853027,"connectStart":155.39999961853027,"domainLookupEnd":155.39999961853027,"domainLookupStart":155.39999961853027,"fetchStart":155.39999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":155.39999961853027,"responseEnd":318.2999997138977,"responseStart":318.2999997138977,"secureConnectionStart":155.39999961853027},{"duration":163.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":155.59999990463257,"connectEnd":155.59999990463257,"connectStart":155.59999990463257,"domainLookupEnd":155.59999990463257,"domainLookupStart":155.59999990463257,"fetchStart":155.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":155.59999990463257,"responseEnd":319.09999990463257,"responseStart":319.09999990463257,"secureConnectionStart":155.59999990463257},{"duration":164.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":155.69999980926514,"connectEnd":155.69999980926514,"connectStart":155.69999980926514,"domainLookupEnd":155.69999980926514,"domainLookupStart":155.69999980926514,"fetchStart":155.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":155.69999980926514,"responseEnd":320,"responseStart":320,"secureConnectionStart":155.69999980926514},{"duration":164.80000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":155.89999961853027,"connectEnd":155.89999961853027,"connectStart":155.89999961853027,"domainLookupEnd":155.89999961853027,"domainLookupStart":155.89999961853027,"fetchStart":155.89999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":155.89999961853027,"responseEnd":320.69999980926514,"responseStart":320.69999980926514,"secureConnectionStart":155.89999961853027},{"duration":165.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":156.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":156.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":321.19999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":165,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":156.19999980926514,"connectEnd":156.19999980926514,"connectStart":156.19999980926514,"domainLookupEnd":156.19999980926514,"domainLookupStart":156.19999980926514,"fetchStart":156.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":156.19999980926514,"responseEnd":321.19999980926514,"responseStart":321.19999980926514,"secureConnectionStart":156.19999980926514},{"duration":144,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":187.89999961853027,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":187.89999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":331.8999996185303,"responseStart":0,"secureConnectionStart":0},{"duration":139.19999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":188.19999980926514,"connectEnd":188.19999980926514,"connectStart":188.19999980926514,"domainLookupEnd":188.19999980926514,"domainLookupStart":188.19999980926514,"fetchStart":188.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":188.19999980926514,"responseEnd":327.3999996185303,"responseStart":327.3999996185303,"secureConnectionStart":188.19999980926514},{"duration":399.80000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":198.39999961853027,"connectEnd":198.39999961853027,"connectStart":198.39999961853027,"domainLookupEnd":198.39999961853027,"domainLookupStart":198.39999961853027,"fetchStart":198.39999961853027,"redirectEnd":0,"redirectStart":0,"requestStart":198.39999961853027,"responseEnd":598.1999998092651,"responseStart":598.1999998092651,"secureConnectionStart":198.39999961853027},{"duration":380.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":219,"connectEnd":219,"connectStart":219,"domainLookupEnd":219,"domainLookupStart":219,"fetchStart":219,"redirectEnd":0,"redirectStart":0,"requestStart":219,"responseEnd":599.5,"responseStart":599.5,"secureConnectionStart":219}],"threshold":1000,"fetchStart":0,"domainLookupStart":43,"domainLookupEnd":43,"connectStart":43,"connectEnd":92,"secureConnectionStart":68,"requestStart":92,"responseStart":145,"responseEnd":218,"domLoading":148,"domInteractive":730,"domContentLoadedEventStart":730,"domContentLoadedEventEnd":790,"domComplete":838,"loadEventStart":838,"loadEventEnd":840,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"ed4b0a6fa8a144","effectiveType":"4g","downlink":9.9,"rtt":0,"serverDuration":98,"dbReadsTimeInMs":12,"dbConnsTimeInMs":14,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
Admittedly, this isn't as well explained as I would like. Oh, for a whiteboard!