【发布时间】:2017-03-04 19:00:09
【问题描述】:
我在我的服务器上使用节点 websocket ws 模块,我想从我的服务器向我的嵌入式设备(Arduino/GPRS 模块 SIM808)发送命令。我也用过HTTP,但是每次我的设备建立连接发送请求都需要很长时间。
我应该在 arduino 上运行下面编写的客户端来建立与 webSocket ws sever 的连接。但在我的嵌入式设备上,我没有浏览器,只能将AT 命令发送到套接字。
var ws = new WebSocket('ws://'+location.host);
ws.onopen = function open() {
// ws.send('something from client');
};
ws.onmessage = function incoming(data, flags) {
console.log(data, flags);
// flags.binary will be set if a binary data is received.
// flags.masked will be set if the data was masked.
};
function sendMessage(input) {
ws.send('From Client:' +input);
}
有什么方法可以通过我的嵌入式设备和网络服务器建立套接字通信,我如何在不使用网络浏览器的情况下与网络套接字服务器通信?
【问题讨论】:
-
我对什么是客户端和什么是服务器感到困惑。客户端将连接到服务器。您的 arduino 扮演什么角色(客户端或服务器)?浏览器只能是客户端,不能是服务器。
-
另外,请记住,webSocket 与常规套接字不同。因此,如果您希望通过常规套接字向您的 arduino 发送 AT 命令,那么您不能直接使用 webSocket 连接来执行此操作。你需要一个常规的 TCP 连接来做到这一点。但是,您可以在您的 arduino 上放置一个 webSocket 服务器,并且浏览器可以连接到该服务器,然后您的 arduino 上的 webSocket 服务器可以向自身发送所需的 AT 命令以响应传入的 webSocket 消息。
-
@jfriend00 感谢您的 cmets,我将使用 arduino 作为客户端,并且我已经将我的 webSocket 服务器代码部署到 Heroku,服务器工作正常,但是当我给我的 arduino 板提供主机名时和我的 webSocket 服务器的端口号
AT+CIPSTART="TCP",<domain name>,<port>来自串行监视器,它以TCP CLOSED响应,这意味着没有检测到该地址。 -
您的 arduinio 上的串行监视器是否特别支持 webSockets? webSocket 连接与普通 TCP 连接不同。为了连接到 webSocket 服务器,必须遵循 webSocket 协议和数据帧格式以及安全握手。