这可能是一些愚蠢的问题,一些已经缠绕它的人,也许我只需要更多的咖啡.
问题:无论是使用websockets还是ajax,似乎仍然会发生一些轮询.它是否正确?
示例 (不是真实的项目):我想留意文本文件.除非我遗漏了一些东西(更多的咖啡?),我还是不得不a)询问服务器是否有更新,或b)告诉页面我有更新; 通过将PHP代码暂停一段时间或在客户端进行setTimeout循环.
我明白的事情:我确实看到了在服务器和页面之间来回交谈的好处.我看到我没有发送http请求.所以我看到了好处.
细节:我一直只是使用xmlhttprequest所以我决定从我认为理解的内容中查看整个websockets的东西,是实时发送给客户端的数据,但是,如上所述,除非我遗漏了某些东西或者这里有一些逻辑,似乎我还是要告诉php或javascript来检查数据的间隔,否则数据将在无限循环中发送(想象一下调用mysql).
也许我的代码中的逻辑是各种各样的坏.欢迎您查看.从我发现的所有示例中,每个人似乎只是在PHP中运行无限循环
PHP(减去所有连接术语)
while(true) {
// update once a second
$this->send($client, file_get_contents('/my/file/test.txt'));
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript
var websocket = new WebSocket( "ws://mysite.com:12345" );
websocket.onmessage = function( str ) {
console.log( str.data );
};
Run Code Online (Sandbox Code Playgroud)
我只是没有理解这个如何在没有某种轮询的情况下实现它的逻辑.也许这就是它应该如何运作.
我明白,如果我从PHP代码中删除睡眠,事情会变得更加实时,太多,但这似乎会在上面的例子中无限地轮询文件并且这似乎不对.
编辑:为了澄清,我并不是专门寻找一个观看文本文件的具体解决方案.如果你撇开这个问题,你可能已经想到了这一点.
编辑:未来的访问者,答案是:当用户发送更改时,您不会专门关注更改,而是将更改发送给打开的连接.