npm install mqtt crypto-js --save
index.js
import mqtt from 'mqtt';
import CryptoJS from 'crypto-js';
var host='{iothubname}.azure-devices.net';
var deviceId = '{DeviceId}';
var sharedKey = '{DeviceKey}';
var topic ='devices/'+deviceId+'/messages/devicebound/#';
function encodeUriComponentStrict (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
function getSaSToken (hostName,deviceId,sharedKey){
var sr = encodeUriComponentStrict(hostName + '/devices/' + deviceId);
var se = Math.round(new Date().getTime() / 1000) + 24 * 3600;
var StringToSign = sr + '\n' + se;
var sig = encodeUriComponentStrict(CryptoJS.HmacSHA256(StringToSign, CryptoJS.enc.Base64.parse(sharedKey)).toString(CryptoJS.enc.Base64));
return 'SharedAccessSignature sr=' + sr + '&sig=' + sig + '&se=' + se;
}
var client = mqtt.connect({
host:host,
port:443,
path:'/$iothub/websocket?iothub-no-client-cert=true',
protocol: 'mqtts',
protocolId: 'MQTT',
protocolVersion: 4,
clientId:deviceId,
username: host+'/'+deviceId+'/api-version=2016-11-14',
password: getSaSToken(host,deviceId,sharedKey),
keepalive: 30000
})
client.on('connect',function(packet){
console.log('mqtt connected!',packet);
client.subscribe(topic);
})
client.on('reconnect',function(){
console.log('mqtt reconnected!');
})
client.on('close',function(c){
console.log('mqtt closed!',c);
})
client.on('message',function(topic, message, packet){
var string = new TextDecoder("utf-8").decode(message);
console.log('receive!',string);
})
如何获取设备id和设备密钥:
问题内容: 我如何在客户端使用 HTML5 , CSS 和 JavaScript 编写网站,以便 在页面加载后 允许 客户端浏览器之间的直接tcp / ip连接 。 我需要这样做以减少延迟,因为该站点将要求将其中一个用户的输入尽快传输给另一用户,因此从客户端A到服务器再向客户端B发送数据并不是一个好习惯。选项。 我阅读了有关此主题的先前文章,但没有可用的解决方案/示例。据我了解,可以使用Silve
最近我停止并启动了我的EC2实例,这导致我不得不从头开始安装我的web应用程序(使用Tomcat) 现在我有Tomcat在EC2实例上运行,我可以通过在EC2服务器上打开浏览器并指向http://localhost:8080/web_app_name 但是,如果我在自己的电脑上打开浏览器,并指向EC2实例的公共IP(例如EC2 XXX XXX.ap-southest-2.compute.amazo
到“ws://example.app:8080/”的WebSocket连接失败:在收到握手响应之前连接已关闭
问题内容: 我读过有关 WebSocket的文章, 但它们似乎并不是纯粹的“套接字”,因为在它们上面有一个应用程序层协议。“ WS: ” 是否可以通过Web浏览器进行纯套接字连接来激活网页? 这是我在黑暗中的随机刺伤 Java提供的Applet套接字(需要安装Java) Flash提供的Flash插槽(需要安装闪光灯) 但是关于HTML5,如果不是Socket,为什么将它们称为WebSocket?
我在HTTPS网站上启用了个人用户脚本。userscript使用Socket.io客户端API连接到我的PC中的Node.js TCP服务器 服务器注意到客户端正在连接到服务器,但客户端没有注意到连接,而是从浏览器控制台接收此错误 我的服务器代码
问题内容: 我尝试使用rubyseleniumwebdriver运行一些基本的自动化测试。相同的代码在我的家用计算机上可以完美地工作,但是在我的工作计算机上却无法工作,而我的工作计算机位于代理后面(不需要身份验证)。 driver = Selenium :: WebDriver.for:firefox,:profile =>’默认’ 我得到的错误是: 浏览器将使用正确的配置文件打开,但驱动程序变量