我正在为朋友建立一个小型聊天应用程序,但不确定如何及时获取信息,而不是手动或基本上强制刷新页面.
目前,我正在使用简单的AJAX实现这一点,但这有一个缺点,即当一个短计时器过去时经常点击服务器.
在研究长/短轮询时,我遇到了HTML5 WebSockets.这似乎很容易实现,但我不确定是否存在一些隐藏的缺点.例如,我认为WebSockets仅受某些浏览器的支持.我应该注意WebSockets还有其他缺点吗?
既然两种技术似乎都做同样的事情,那么在哪种情况下,人们更愿意使用其中一种?更具体地说,HTML5 WebSockets使AJAX长/短轮询过时,还是有令人信服的理由更喜欢AJAX而不是WebSockets?
我正在为iOS游戏编写服务器.游戏是基于回合的,并且服务器将信息推送到客户端的唯一时间是通知对手的移动.
我很好奇是否有人可以评论使用websockets和长轮询之间的性能和易于实现的差异.另外,如果我使用websockets,我应该只使用它来接收信息并发送其他所有的POST请求,还是应该通过websocket进行所有通信?
另外,如果我有兴趣创建一个Web客户端,那么在websockets和长轮询之间还有什么需要考虑的吗?
寻找Web套接字实现的Hello World Type示例:
这是来自php.net的Socket Create参考,但这看起来比Web Sockets更低.
我想在caniuse.com上使用这个Web套接字,现在可以在所有新的主流浏览器中实现.
谷歌搜索出现了这个Nets.TutsPlus网站,我可以在其中使用JavaScript示例代码...但我需要知道如何在PHP中实现服务器端,而不是像示例中那样在Java,Ruby或Node.js中实现.
PHP Socket Create是否相关?PHP本身是否支持Web套接字?我想在PHP实现的正确方向上的一点是有帮助的.
实际上这个教程有一个到phpwebsockets的断开链接......这是应该使用的库吗?
Websockets.org有一个测试应用程序,但没有提到PHP.
我一直想做一个实时聊天.
我几年前在PHP + Ajax + Mysql中完成了这项工作并破坏了我的服务器.然后我尝试使用Flash +文本文件.我放弃了,并没有在10年内尝试过.但最近我听说过webhooks和websockets.他们似乎都是一种方法,但我并没有完全掌握其中的差异.谁能解释一下?
嗨我明白,在长轮询中你保持与服务器的连接打开很长时间,直到你从服务器得到一个响应,然后再次轮询并等待下一个响应.但是,我似乎不明白如何编码它.下面有这个代码使用长轮询,但我似乎没有得到它
(function poll(){
$.ajax({ url: "server", success: function(data){
//update page based on data
}, dataType: "json", complete: poll, timeout: 30000 });
})();
Run Code Online (Sandbox Code Playgroud)
但是这里的连接如何保持开放.我知道一旦获得服务器的响应,就会再次触发"poll"功能.但是如何保持连接打开?
编辑1: - 如果有人也可以解释这里实际超时的情况,那将会很棒
我有一个嵌入在Django应用程序中的散景图.我在django视图中创建绘图并将绘图推送到散景服务器以在我的网页中显示绘图.
#view.py
def view_plot(request):
f=figure()
f.plot(#some data#)
session = push_session(curdoc())
context = {'script': autoload_server(f, session_id=session.id)}
return render_to_response('plot.html', context=context)
Run Code Online (Sandbox Code Playgroud)
一切都很好.现在我想做一个实时图,每次创建一个新的DB-Entry时,应该更新图.我不确定最好的方法是什么.
在网页上使用计时器来询问现在的数据是一个好习惯吗?
或者有没有办法从服务器推送更新,以便每个当前连接的客户端获得更新?
我会非常感谢每一个提示.
非常感谢.
在我的申请中,我必须显示有关特定行动的通知?
我必须显示登录用户的通知..
1 - 获取通知的一种方法是在特定时间间隔后继续轮询.这是拉动通知.
但这会导致服务器无法点击.
如何在行动时使用来自服务器的推送通知..?(我正在使用java(servlet/jsp)和tomcat)
HTTP标头是否也会导致连接长时间保持打开状态?那有什么好处呢?
谁能请我澄清一下?我想,我似乎错过了这个概念.
如何使用PHP从服务器向客户端发送消息,避免无关的Ajax调用.
这是一个想法:
用户:Alice进行了一次更改,并将其发送到服务器.
然后,服务器检查哪些用户不是最新的,如果没有,则调用一些代码将与更改有关的信息发送给Bob(在这种情况下,谁不是最新的).
如何向Bob发送消息?
我实现了一些代码来查询数据库中的任何更改并发送事件. 这是我的PHP脚本的代码
header("Content-Type: text/event-stream");
header('Cache-Control: no-cache');
//****Some code here to query the database
echo "event: message\n";
echo "data: change_from_database \n";
echo "\n\n";
ob_flush();
flush();
Run Code Online (Sandbox Code Playgroud)
我依靠浏览器每次连接关闭时自动重新连接,所以我没有在我的服务器代码上实现任何循环.另外,我从这个线程中了解到,实现无限循环有许多缺点.
所以一切都在客户端工作正常:每次连接关闭时浏览器都会重新连接,每次服务器发送一个事件时都会触发事件; 除了没有重新连接的Firefox(40.0.2)之外.我知道它不是因为我写了一些JavaScript错误检查代码来测试这个:
var evtSource = new EventSource("../sse.php");
evtSource.onerror = function(event){
var txt;
switch( event.target.readyState ){
case EventSource.CONNECTING:
txt = 'Reconnecting...';
break;
}
console.log(txt);
}
Run Code Online (Sandbox Code Playgroud)
因此,像每一秒后,铬控制台上的控制台例如日志"Reconnecting"
.另一方面,Firefox重新连接一次,再也不会重新连接.
如何编写代码以使其在Firefox上运行,也许还有其他支持服务器发送事件但不自动重新连接的浏览器?