武清区网站开发,出入西安最新通知今天,工作室名字,django 网站开发文章目录 1 前言2 简介2 .1 什么是WebSocket协议#xff1f;2.2 WebSocket协议工作原理2.3 WebSocket协议优点2.4 WebSocket应用场景 3 WIZnet以太网芯片4 WebSocket示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接… 文章目录 1 前言2 简介2 .1 什么是WebSocket协议2.2 WebSocket协议工作原理2.3 WebSocket协议优点2.4 WebSocket应用场景 3 WIZnet以太网芯片4 WebSocket示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 在互联网的世界中实时、高效的数据交换是至关重要的。WebSocket协议作为一种强大的通信工具正是为满足这一需求而生。与传统的HTTP协议不同WebSocket协议允许服务器主动向客户端发送数据而不需要客户端发起请求。这种特性使得WebSocket协议在需要实时数据交换的场景中如在线聊天、多人在线游戏等具有显著的优势。 W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网Web socket应用的基本原理、使用步骤、应用实例以及注意事项帮助读者更好地掌握这一技术。
2 简介
2 .1 什么是WebSocket协议 WebSocket是一种网络协议允许服务器和客户端之间进行双向通信。与HTTP使用请求和响应模式不同WebSocket对等方可以在任何时候向任一方向发送消息。WebSocket通常用于聊天应用和其他需要服务器和客户端之间持续通信的应用。 2.2 WebSocket协议工作原理
客户端向服务器发出HTTP请求以建立WebSocket连接。如果服务器使用WebSocket协议则它将接受升级并发送响应。如果初始握手成功客户端和服务器已经同意使用为HTTP请求建立的现有TCP/IP连接作为WebSocket连接。数据现在可以通过这个连接使用基本的帧消息协议流动。一旦双方都确认WebSocket连接应该关闭TCP连接就会被拆除。 2.3 WebSocket协议优点
MODBUS TCP协议的优点包括
全双工通信WebSocket支持全双工通信这意味着服务器和客户端可以同时发送和接收信息。实时性使用WebSocket可以立即发送和接收数据比HTTP更快。此外它们比AJAX更快。跨源通信尽管这可能带来安全风险但WebSocket支持跨源通信。跨平台兼容性WebSocket支持跨平台兼容性包括Web、桌面和移动设备。低开销HTTP需要大约2000字节的开销而WebSocket只需要2字节。替代长轮询WebSocket可以替代长轮询。数据类型与只能发送字符串数据类型的AJAX调用不同WebSocket是数据类型化的。持久连接WebSocket是客户端和服务器之间的持久连接这允许服务器在任何时候向客户端发送数据而无需客户端请求。低延迟由于连接已经建立因此WebSocket数据帧的组织非常高效主要是6个额外的字节2个字节用于头部4个字节用于掩码可以比通过包含头部、cookie等的HTTP请求更高效地发送数据。减少带宽使用与基于HTTP的实时机制如HTTP长轮询相比WebSocket协议使用持久连接而不是连续的HTTP请求/响应周期。WebSocket需要的带宽较少并且与HTTP相比提供了较低的延迟从而减轻了客户端和服务器的负担。改善性能和响应性WebSocket的优点是它们可以在客户端和服务器之间进行实时通信而无需频繁的HTTP请求/响应。这带来了诸如减少延迟、改善性能和响应性的Web应用程序等好处。
2.4 WebSocket应用场景
WebSocket协议的应用场景广泛以下是一些主要的领域
实时事件更新例如体育比赛实时得分、股市价格等。用户通知例如软件更新、内容更新。协作编辑工具多人同时在线编辑同一份文档。信息流例如社交媒体和新闻的实时更新。社交媒体流例如实时更新的Twitter或Facebook信息流。聊天应用例如实时的在线聊天。多人在线游戏例如需要多人同时在线的网络游戏。实时位置数据更新例如共享单车或打车应用的实时位置更新。股市应用例如实时更新的股票价格。
使用WebSocket搭建的在线网页聊天示例 3 WIZnet以太网芯片
WIZnet 主流硬件协议栈以太网芯片参数对比
ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork PerformanceW5100STCP/IPv4 MAC PHY8bit BUS, SPI16KB4Max.25MbpsW6100TCP/IPv4/IPv6, MAC PHY8bit BUS, Fast SPI32KB8Max.25MbpsW5500TCP/IPv4, MAC PHYFast SPI32KB8Max 15Mbps
W5100S/W6100 支持 8bit数据总线接口网络传输速度会优于W5500。W6100 支持IPV6与W5100S 硬件兼容若已使用W5100S的用户需要支持IPv6可以Pin to Pin兼容。W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。
4 WebSocket示例概述以及使用
4.1 流程图 程序的运行框图如下所示 4.2 准备工作核心
软件
Visual Studio CodeWIZnet UartTool
硬件
W5100S IO模块 RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板Micro USB 接口的数据线TTL 转 USB网线
4.3 连接方式 通过数据线连接PC的USB口主要用于烧录程序也可以虚拟出串口使用 通过TTL串口转USB连接UART0 的默认引脚 RP2040 GPIO0UART0 TX ---- USB_TTL_RXRP2040 GPIO1UART0 RX ---- USB_TTL_TX 使用模块连接RP2040 进行接线时 RP2040 GPIO16 ---- W5100S MISORP2040 GPIO17 ---- W5100S CSRP2040 GPIO18 ---- W5100S SCKRP2040 GPIO19 ---- W5100S MOSIRP2040 GPIO20 ---- W5100S RST 通过PC和设备都通过网线连接路由器LAN口
4.4 主要代码概述 我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富操作简单芯片在硬件上集成了TCP/IP协议栈该库又封装好了TCP/IP层之上的协议我们只需简单调用相应函数即可完成协议的应用。
第一步在websocket_server.c文件中引用对应的库文件。
第二步宏定义常量和定义全局变量。
第三步定义四个函数包括一个1秒定时器回调函数用于处理DHCP超时处理一个设置网络地址函数一个串口初始化函数以及一个串口接收回调函数。
第四步主函数首先是对串口和SPI进行初始化以及链路检测。然后是设置W5100S的网络地址首先使用DHCP的方式进行获取失败后使用预设的静态IP地址。然后则是将网页信息注册到HTTP服务器上最后则是在主循环中跑httpServer的程序和websocketServer程序。
主函数程序如下
int main()
{int i;struct repeating_timer timer; // Define the timer structurewiz_NetInfo get_info;/* MCU init */stdio_init_all(); // Initialize the main control peripheralwizchip_initialize(); // Initialize the chip interfacewizchip_setnetinfo(net_info); // Configure once firstUART0_Init(); // uart0 init/*dhcp init*/DHCP_init(SOCK_DHCP, ethernet_buf); // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback, NULL, timer); // Add DHCP 1s Tick Timer handlerprintf(wiznet chip websocket server example.\r\n);network_init(net_info); // Configuring Network Informationprint_network_information(get_info); // Read back the configuration information and print ithttpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, MAX_HTTPSOCK, socknumlist); // HTTP Server initializationreg_httpServer_webContent((uint8_t *)index.html, (uint8_t *)INDEX_HTML); // netinfo.html : Network information example pagewhile (true){for (i 0; i MAX_HTTPSOCK; i){httpServer_run(i);}do_websocket_server(SOCK_WEBSOCKET);}
}4.5 结果演示 5 注意事项
发送的内容只能为UTF-8格式如果是其他格式可能会导致乱码造成网页崩需要刷新才能正常。如果想用WIZnet的W5500来实现本章的示例我们只需修改两个地方即可
(1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件将_WIZCHIP_ 宏定义修改为W5500。
(2)在library下找到CMakeLists.txt文件将COMPILE_SEL设置为ON即可OFF为W5100SON为W5500。
6 相关链接
WIZnet官网
WIZnet官方库链接
本章例程链接
想了解更多评论留言哦