我可以直接在Web浏览器的URL中键入WebSocket地址以直接连接到服务器吗?

pzfprimi  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(144)

我是一个使用嵌入式控制器(ESP 32)进行Web编程的新手,我想知道我是否可以直接输入,例如“ws:192.168.1.2/socketserver“来连接到Web浏览器URL中的迷你服务器(ESP 32)的WebSocket?(其中192.168.1.2是迷你服务器的IP地址)
我问这个问题是因为我可以成功地写入浏览器的URL,例如http://192.168.1.2/Input?motorspeed=123,以将命令传输到由上面的微控制器执行的HTTP服务器,但当我使用WebSocket方法时,从未成功。
事实上,我可以成功地发送WebSocket命令或正常的http服务器命令使用JavaScript,这是验证了许多示例代码。
这可能是一个愚蠢的问题,它的任何建议。
(信息只是必要的,在情况下:)我在ESP 32脚本(部分代码使用Arduino IDE):

#include <ESPAsynWebSrv.h>
#include <AsyncTCP.h>
.
.
.
AsyncWebServer server(80);
AsynWebSocket wsInput("/socketserver");

void onWsInputEvent( ....){ ....do somethings }

Setup(){
   Server.on("/", HTTP_GET, handleRoot);
   Server.onNotFound(handleNotFound);
   wsInput.onEvent(onWsInputEvent);
   Server.addHandle(&wsInput);
}

字符串

jm81lzqq

jm81lzqq1#

我想我明白你想知道什么。
简短的回答是否定的,你不能仅仅从浏览器地址栏中拥有一个完整的WebSocket连接,并在不连续运行某种客户端程序的情况下发送命令,即在网页中运行JavaScript。
网页浏览器地址栏只会发送一个一次性的http请求,并在屏幕上加载服务器的响应,收到响应后,连接就关闭了。
简单来说,网页浏览器的“地址栏”不知道如何处理websockets,你需要一个带有JavaScript的网页。
WebSockets是一个很大的主题,很难用几句话来解释,但这里有一些非常非常简化的信息。
WebSockets使用http协议。不同的是,当你发送一个标准的http请求(在浏览器中输入一个链接,从web表单发送一个post/get,使用Ajax等)时,服务器接收请求,做它必须做的事情,返回响应并关闭连接。
使用websockets,客户端发送一个初始的http请求,在头中有一个“升级”指令,服务器用握手响应,客户端响应,连接保持打开。直到,客户端或服务器显式地关闭连接,或者由于某种原因连接断开,它们物理上断开连接。您可以看到,这需要持续运行的客户端程序来维护连接,这就是为什么浏览器的地址栏不工作。
从技术上讲,你可以做一个简单的网页,里面实现了websockets(几个文本字段,一个发送按钮和一点JavaScript),可以与你的ESP 32通信。你可以保存在ESP程序中的HTML代码。然后当你从浏览器中点击ESP的URL(普通的http请求),ESP可以返回保存的HTML页面到浏览器,然后你可以通过websockets聊天。

相关问题