dan*_*nny 121 javascript websocket mongrel2
我一直在阅读websockets中的ping/pong消息以保持连接活着,但我不确定它们是什么.它是一种独特的框架类型吗?(我没有在与乒乓相关的chrome中的javascript WebSocket对象上看到任何方法).或者它只是一种设计模式(例如,我将"ping"或任何其他字符串发送到服务器并让它响应).乒乓球是否与延续帧有关?
我问的原因是我正在使用一个在Mongrel2后面运行的python框架,所以我想知道是否有办法向Mongrel2发送一条特定的ping/pong消息,告诉它在没有我的python应用需要的情况下保持连接存活担心它.我想,类似于有一个单独的HTTP方法.而且我认为专用的ping/pong消息帧可能比字符串"ping"更简单(服务器和网络上的负载更少),尽管这可能无关紧要.
编辑:我只看了RFC 6455,它看起来像Ping和Pong肯定是控制帧类型与自己的操作码.那么如何从Chrome中的javascript发送Ping帧?
kan*_*aka 110
没有Javascript API来发送ping帧或接收pong帧.这是您的浏览器支持或不支持.也没有API来启用,配置或检测浏览器是否支持并使用ping/pong帧.有关于为此创建Javascript ping/pong API的讨论.pings有可能在未来可配置/可检测,但Javascript不太可能直接发送和接收ping/pong帧.
但是,如果您同时控制客户端和服务器代码,则可以轻松地在更高级别添加ping/pong支持.如果您还没有,那么您的消息中将需要某种消息类型标题/元数据,但这非常简单.除非您计划每秒发送数百次ping或拥有数千个并发客户端,否则自己完成此操作的开销很小.
mok*_*oka 23
Ping只能从服务器发送到客户端,浏览器应该尽快使用Pong OpCode自动回答.所以你不必担心更高层次的问题.
尽管并非所有浏览器都支持标准,但它们在实现此类机制时可能存在一些差异,甚至可能意味着没有Pong响应功能.但我个人正在使用Ping/Pong,从未看到客户端没有在低级客户端实现上实现这种类型的OpCode和自动响应.
另一种 JavaScript 解决方案发送空数据帧,而不是 ping 帧:
如果 WebSocket 服务器主动
ws在几分钟后断开链接,则服务器和客户端之间不会发送任何消息。
客户端主动发送自定义ping消息,通过使用该keepAlive函数保持活动状态
服务器端会忽略自定义ping消息并响应自定义pong消息
let timerId = 0;
function keepAlive(timeout = 20000) {
if (webSocket.readyState == webSocket.OPEN) {
webSocket.send('');
}
timerId = setTimeout(keepAlive, timeout);
}
function cancelKeepAlive() {
if (timerId) {
clearTimeout(timerId);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100954 次 |
| 最近记录: |