1

我在做什么

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

我实现 websocket 的方式

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

问题

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

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

这让我相信事务太快了,可能存在实现错误、lwIP 错误或硬件错误(我使用 enet_io 示例作为基础)。

我对如何修复它的假设

看到这个后,我可以想象我需要控制发送到微控制器的字符串,使其每秒发送一次,或者甚至更少,因为目前它每秒执行 1000 个事务,有时甚至更多。

问题

所以……在我的试验之后,我还有几个问题需要回答。websockets需要这种关系吗?客户要求和服务器在哪里服务?或者只要连接打开,我可以简单地将数据从服务器流式传输到客户端吗?我的假设是放慢我的利率会奏效吗?

4

1 回答 1

1

websockets需要这种关系[request-response]吗?客户要求和服务器在哪里服务?或者只要连接打开,我可以简单地将数据从服务器流式传输到客户端吗?

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

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

但是,通常的做法ping是偶尔从客户那里得到回复或回复,只是为了知道他们还活着。

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

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

我的假设是放慢我的利率会奏效吗?

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

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

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

于 2017-04-20T03:11:53.857 回答