正如标题所说,我正在stellaris板上实现websocket服务器。目前我能够建立与客户端的连接并发送几帧。
我正在开发它的方式类似于主从通信。每当客户端发送一个字符串,服务器就会解码它然后回答。目前我只是回应一个角色'e',它只是一个反击。问题是我在客户端实现websocket,只要收到消息就发送'e',然后在页面上显示消息。
问题在于它执行了大约15个事务,然后我可以看到通信被重新传输到stellaris板,然后通信关闭。连接关闭后,我注意到我无法访问主板上的任何其他页面。它根本不再响应。
这让我相信交易过快,可能存在实施错误,lwIP错误或硬件错误(我使用enet_io示例作为基础)。
在看到这个之后,我可以想象我需要的是控制发送到微控制器的字符串,使其每秒发送一次,或者甚至更少,因为此刻它正在做每秒1000次事务和有时更多。
所以...在我的试验之后,我仍然有一些问题需要回答。 websockets需要这种关系吗?客户要求和服务器服务的位置?或者,只要连接打开,我可以简单地将数据从服务器传输到客户端吗?我的假设是放慢我的费率会起作用吗?
答案 0 :(得分:1)
websockets是否需要这种关系[请求 - 响应]?客户要求和服务器服务的位置?或者,只要连接打开,我可以简单地将数据从服务器传输到客户端吗?
Websocket协议不需要请求 - 响应模型(连接建立握手除外)。
服务器可以将数据流式传输到客户端,而无需担心来自客户端的任何响应或请求。
然而,通常的做法是偶尔从客户那里得到回复或ping
,只是为了知道他们还活着。
这允许客户端在消息或ping
无法到达服务器时续订连接 - 否则客户端可能不会注意到连接异常断开(它只是假设没有发送更新,因为没有新的数据)。
即使没有交换信息,它也允许服务器知道连接仍然存在。
我的假设是放慢速度会有效吗?
我认为由于第一个问题的答案,这个问题变得不那么重要了......但是,我应该注意到Web套接字客户端(通常是浏览器)将拥有有限的资源和不同的内存管理方案。
由于页面加载(或刷新)以来,浏览器通常会保留对所有交换的引用,因此浏览器很容易被过多的数据所压倒。
将事件记录到浏览器的控制台时尤其如此。