是否有可能创建一个从浏览器中的WebSockets订阅? 我们正在使用的分支功能/ 1181_websockets分支机构,Git版本5ca6770aa401b52a31293fdcef4a9743fb1de2c4。
我们做了一个的PoC尝试通过WebSockets向订阅浏览器。 我们试图连接在浏览器中订阅网址运行一些JS代码。 已建立连接,而是通过插座从客户端发送数据时,猎户座坠毁。 是该用例的支持? 你有这方面的工作的例子吗? JS代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button id="send" type="button" name="button">send</button>
<script type="text/javascript">
var payload = `{"description": "One subscription to rule them all",
"subject": {
"entities": [{
"idPattern": ".*",
"type": "Room"
}],
"condition": {
"attrs": ["temperature"],
"expression": {
"q": "temperature>40"
}
}
},
"expires": "2016-04-05T14:00:00.00Z",
"throttling": 5
}`;
var ws = new WebSocket('ws://orion-url:9010/v2/subscriptions', 'ngsiv2-json');
var button = document.getElementById('send');
button.addEventListener('click', function(event) {
ws.send(payload)
});
</script>
</body>
</html>
作为替代方案,我们试图创建一个使用REST API订阅,询问猎户然后通过WebSockets通知我们。 我们发布了以下JSON:
{
"description": "One subscription to rule them all",
"subject": {
"entities": [
{
"idPattern": ".*",
"type": "Room"
}
],
"condition": {
"attributes": [
"temperature"
],
"expression": {
"q": "temperature>40"
}
}
},
"notification": {
"callback": "ws://my-websocket-listener:8081"
},
"expires": "2016-04-05T14:00:00.00Z",
"throttling": 5
}
订阅进程失败和猎户座返回与该消息的422个状态码:
{
"error": "BadRequest",
"description": "Invalid URL"
}
难道我们做出的订阅请求的任何错误? 是该用例的支持?
谢谢!
目前,你可以用你的浏览器订阅和接收通知,限制如下:
- 从WS您可以创建一个WS或REST订阅。
- 从静止您不能创建一个WS订阅。
- 只有在REST订阅您可以指定回调,在WS总是必须是“WS://”。 如果你创建一个WS订阅创作者将接收器。
- 如果连接被关闭WS订阅被删除。
在这里,我让小小的代码示例,你只需要通过你的猎户座的URL更改URL
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript"> $(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; // Here change with your URL var websocket = new WebSocket('ws://127.0.0.1:9010', 'ngsiv2-json'); websocket.onopen = function () { $('h1').css('color', 'green'); }; websocket.onerror = function () { $('h1').css('color', 'red'); }; websocket.onmessage = function (message) { console.log(message.data); console.log(message); $('div').append(message.data + '<br/>'); }; $('#send').click(function(e) { e.preventDefault(); if ($('#txt').val().length > 0) { websocket.send($('#txt').val()); $('#txt').val(''); } }); $('#new').click(function(e) { e.preventDefault(); var msg = "{\"verb\":\"POST\",\"url\":\"/v2/entities\", \ \"params\":{\"options\":\"keyValues\"}, \ \"payload\":{\"type\":\"1\",\"id\":\"1\",\"temp\":1}}"; $('#txt').val(JSON.stringify(JSON.parse(msg), null, 2)); }); $('#upd').click(function(e) { e.preventDefault(); var msg = "{\"verb\":\"POST\",\"url\":\"/v2/entities/1\", \ \"params\":{\"options\":\"keyValues\"},\"payload\":{\"temp\": 1}}"; $('#txt').val(JSON.stringify(JSON.parse(msg), null, 2)); }); $('#get').click(function(e) { e.preventDefault(); var msg = "{\"verb\":\"GET\",\"url\":\"/v2/entities/1\"}"; $('#txt').val(JSON.stringify(JSON.parse(msg), null, 2)); }); $('#del').click(function(e) { e.preventDefault(); var msg = "{\"verb\":\"DELETE\",\"url\":\"/v2/entities/1\"}"; $('#txt').val(JSON.stringify(JSON.parse(msg), null, 2)); }); $('#sub').click(function(e) { e.preventDefault(); var msg = "{\"verb\":\"POST\",\"url\":\"/v2/subscriptions\", \ \"payload\":{\"description\":\"My subscription\", \ \"subject\":{\"entities\":[{\"id\":\"1\",\"type\":\"1\"}], \ \"condition\":{\"attributes\":[\"temp\"],\"expression\":{\"q\":\"temp>40\"}}}, \ \"notification\":{\"callback\":\"ws://\",\"attributes\":[\"temp\"], \ \"throttling\":5},\"expires\":\"2017-04-05T14:00:00.00Z\"}}"; $('#txt').val(JSON.stringify(JSON.parse(msg), null, 2)); }); }); </script> </head> <body> <h1>WebSockets test</h1> <form> <table border="0"> <tr> <td colspan="2"> <textarea rows="35" cols="70" id="txt"></textarea> </td> </tr> <tr> <td> <button id="new">New</button> <button id="upd">Update</button> <button id="get">Show</button> <button id="del">Delete</button> <button id="sub">Subcription</button> </td> <td align="right"> <button id="send">Send</button> </td> </tr> </table> </form> <br/> <p>Server:</p> <div></div> </body> </html>
我不是一个JS高手......但这项工作对我来说是一个考验,当我在工作,WS猎户座
干杯