我有一个使用javascript File.ReadAllText(unicodeFileFullName, Encoding.Default);
连接到PHP脚本的Web应用程序
我试图检查服务器端何时发生变化。
我只能通过每秒向页面发送ping来检查,如
的javascript
????
PHP
xmlhttprequest
这对用户和服务器来说非常密集
这样更好吗
的javascript
function stayConnected(){
setTimeout(function(){
xmlhttp.send();
},1000);
}
PHP
<?php
if(update())echo "there's an update";
flush();
?>
第二种解决方案对于观众来说似乎更好但是它对服务器有害吗? 我无法很好地检查服务器负载。有更好的解决方案吗?
答案 0 :(得分:1)
这是我之前回答的转载from this board。
您可以使用服务器已发送事件。流程如下:
data
媒体资源并更新其本地模特。参见this introduction,示例PHP实现。
您也可以使用Web套接字。这是一个comparison of the two。在实施之前,请考虑browser compatibility。
答案 1 :(得分:1)
您有几种选择:
这是您提到的第一个选项。客户端必须请求每x个时间单元请求更新。这导致许多请求。想想每秒要求更新的100个用户,这导致每分钟6000个请求。在许多情况下,请求会排队,而且不再是实时。
这里客户端发送一个请求,并且在服务器上你有一个循环来检查更新(不知怎的,就像你的第二个例子)。一旦有更新,响应将立即发送。这导致许多并行线程来处理服务器。 100个用户制作100个帖子......
两种解决方案都不是最佳解决方案。相反,我们应该使用持久连接进行通信。
持久连接有两种选择:
WebSockets在客户端和服务器之间提供持久连接,双方可以使用该连接随时开始发送数据。最后这是一个事件循环,但你不必关心这个。优点是,这是另一种专门用于实时连接的协议! WebSockets是基于事件的,所以它只使用一个线程。
它与WebSockets非常相似。您在客户端上打开到服务器的持久连接,但是通过HTTP。主要区别在于SSE连接只能将数据推送到客户端。
所以在实践中:由于SSE可以完成的一切也可以通过WebSockets完成,并且浏览器对WebSockets的支持比SSE好得多,我认为这是最好的选择跟着去吧。 例如: IE / Edge支持WebSockets但不支持SSE
也许你可以使用 Ratchet 作为PHP的WebSockets框架: http://socketo.me/
但是我必须给你一个提示,即PHP不适用于繁重的实时应用程序。这是你的用例,也许你应该使用 node.js 作为后端,因为JavaScript自然是基于事件的,以适应这种用例。