是否可以在不使用 Web 浏览器的情况下通过 websockets 交谈?

Posted

技术标签:

【中文标题】是否可以在不使用 Web 浏览器的情况下通过 websockets 交谈?【英文标题】:Is it possible to talk through websockets without using web browser? 【发布时间】: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 协议和数据帧格式以及安全握手。 【参考方案1】:

是的,您可以在 Arduino 使用 WebSockets。

有很多 WebSocket 客户端:

https://github.com/krohling/ArduinoWebsocketClient https://github.com/TheThingSystem/Arduino-Websocket https://github.com/u0078867/Arduino-Websocket-Fast

【讨论】:

以上是关于是否可以在不使用 Web 浏览器的情况下通过 websockets 交谈?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在不显示 web 视图的情况下使用 phonegap 吗?

在不通过网络浏览器进行清理的情况下查看访问日志是不是危险?

如何在不手动检查的情况下确定网站是不是使用 webassembly?

在不重新加载 web 视图的情况下更改 html 文本颜色

是否可以在不使用浏览器插件的情况下修改链接目标的 html?

我可以在不返回条件列的情况下进行左连接吗?