c - 运行 lwIP 1.3.2 的 stellaris 板上的 Websockets

标签 c websocket webserver lwip stellaris

我在做什么

如标题所示,我正在 stellaris 板上实现一个 websocket 服务器。目前我能够与客户端建立连接并发送几帧。

我实现 websocket 的方式

我开发它的方式有点像主从通信。每当客户端发送一个字符串时,服务器都会对其进行解码然后进行应答。目前我只是在响应一个字符“e”,它被设计成一个计数器。问题是我在客户端实现了 websocket 以在收到消息时发送“e”,然后在页面上显示该消息。

问题

问题是它进行了大约 15 笔交易,然后我可以看到通信在 Stellaris 板之间重新传输,然后通信关闭。连接关闭后,我注意到我无法访问板上的任何其他页面。它根本不再响应。

我对可能导致它的原因的假设

这让我相信交易速度太快并且可能存在实现错误、lwIP 错误或硬件错误(我使用 enet_io 示例作为基础)。

我对如何修复它的假设

看到这个之后,我可以想象我需要的是控制发送到微 Controller 的字符串,以便它每秒发送一次,或者甚至更少,因为此刻它正在做大约每秒 1000 个事务并且有时更多。

问题

所以......在我的试验之后,我还有一些问题需要回答。 websockets 需要这种关系吗?客户端请求和服务器服务的地方?或者只要连接打开,我就可以简单地将数据从服务器流式传输到客户端吗?我认为降低利率会奏效吗?

最佳答案

Do websockets need this kind of relationship [request-response]? Where client asks and server serves? Or can I simply stream data from the server to the client as long as the connection is open?

Websocket 协议(protocol)不需要请求-响应模型(建立握手的连接除外)。

服务器可以将数据流式传输到客户端,而不用担心来自客户端的任何响应或请求。

但是,通常的做法是偶尔从客户端获得响应或 ping,只是为了知道它们还活着。

这允许客户端在消息或 ping 未能到达服务器时更新连接 - 否则客户端可能不会注意到异常断开的连接(它只会假设没有发送更新,因为没有新数据)。

即使没有信息交换,它也允许服务器知道连接仍然存在。

Is my supposition that slowing down my rates will work?

我想由于第一个问题的答案,这个问题变得不那么相关了……但是,我可能应该注意到 Web 套接字客户端(通常是浏览器)将拥有有限的资源和不同的内存管理方案。

浏览器很容易被过多的数据淹没,因为它们经常保留对页面加载(或刷新)后所有交换的引用。

将事件记录到浏览器的控制台时尤其如此。

关于c - 运行 lwIP 1.3.2 的 stellaris 板上的 Websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508637/

相关文章:

c - GNU Triplet、GCC 和 Linux 内核编译

c++ - 数组大小优化

python - “gcc”在尝试安装 gevent-websocket 时失败,退出状态为 1

C-读取txt并写入数组

c - 使用 read(..) 从 stdin 读取并计算出缓冲区的大小

python - Websockets - 尝试将 Python 代码转换为 Node

Apache 负载均衡 tomcat websocket

nginx - 将 nginx access_log 和 error_log 记录到 master 进程的 STDOUT 和 STDERR

php - 如何在共享服务器上使用 wkhtmltopdf

http - 为什么服务器会禁止 HTTP HEAD?