将信息从服务器推送到Web客户端的最佳方法是什么?我知道可以使用Silverlight和Flash设置套接字,但我想要保持这两种技术.
Gmail似乎可以很好地轮询服务器以获取更新的电子邮件,甚至聊天程序也能很好地工作(所有这些都在我的网络浏览器中工作).关于使用asp.net做这样的事情的最佳方法的任何想法?
编辑:如果我必须轮询,我想每2或3秒轮询一次服务器.因此,我不确定如何在不使用Web服务器的情况下如何做到这一点.
我打算将我的nginx升级到支持HTTP/2的1.9.6.
有nginx实现HTTP/2服务器推送吗?
我想它们符合我的要求完美,看起来他们应该是简单的实现获得与服务器端事件交手,但我不能让过去一个模糊的错误,什么样子反复被关闭了连接并重新-opened.我尝试的一切都基于这个和其他教程.
PHP是一个单独的脚本:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
?>
Run Code Online (Sandbox Code Playgroud)
并且JavaScript看起来像这样(在身体负载上运行):
function init() {
var source;
if (!!window.EventSource) {
source = new EventSource('events.php');
source.addEventListener('message', function(e) {
document.getElementById('output').innerHTML += e.data + '<br />';
}, false);
source.addEventListener('open', function(e) {
document.getElementById('output').innerHTML += 'connection opened<br />';
}, false);
source.addEventListener('error', function(e) {
document.getElementById('output').innerHTML += 'error<br />'; …
Run Code Online (Sandbox Code Playgroud) 在Socket.io中是否有某种订购机制可以保证客户按顺序接收事件.例如:如果服务器向客户端A发出事件Evt1,则服务器将Evt2广播到所有客户端.thud客户端A接收Evt1然后接收Evt2并且只接受该顺序.我有点懒,读代码,在网上找不到我的答案.我的猜测是否定的,如果是这样的话你会如何实现它或者是否存在现有的解决方案?
我正在尝试按照本教程在我的Flask项目中实现服务器推送.
我已经设置了所有没有错误,但是当我进入/ stream页面时,Firefox将其识别为文件并尝试下载它.在Safari中,它只打印出发送的数据.我尝试将代码调整为更简单的实现,其中线程每秒产生一些数据,但它产生相同的结果.
我的目标是每次python脚本到达循环中的某个点时,它将更新Web界面上的进度条.
对此的任何帮助都会很棒.谢谢.
编辑:
app.py
from flask import Flask, render_template, request, Response
app = Flask(__name__)
def event_stream():
event = "Hello!"
yield 'data: %s\n\n' % event
@app.route('/stream')
def stream():
return Response(event_stream(), mimetype="text/event-stream")
if __name__ == "__main__":
app.debug = True
app.run(threaded=True)
Run Code Online (Sandbox Code Playgroud)
的index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
var source = new EventSource('/stream');
source.onmessage = function (event) {
alert(event.data);
};
</script>
</head>
<body>
<p>Stream page</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我有一个servlet,用于从许多第三方REST数据点获取数据,集成所有数据并以HTML格式报告数据.我也有一个过滤器,其流程如下 -
现在,如果我使用异步servlet AsyncContext context = request.getAsyncContext();
,它将与相同的REST数据点进行通信,但是当数据准备就绪时,它将写入响应流而不是等待所有REST数据点响应,我将如何重写我的过滤器?是否会附加到负责从REST数据点刷新数据的线程,以便一旦处理完所有数据并将其记录下来,它将记录事件记录?有没有可以学习的常见模式来理解如何使用Servlet 3.0的异步servlet处理这样的用例?我使用的是JDK 6.0,Tomcat 7.0.
我的ASP.NET MVC 4 Web应用程序正在向客户端显示经常更新的数据.数据源自外部源(安装在服务器上的应用程序)并由SQL Server 2008 R2处理.
目前,数据流非常传统:客户端从ASP.NET轮询,ASP.NET轮流从SQL Server轮询.
为了避免轮询(现在我需要在Web应用程序的用户之间进行实时交互),我正在改变推送方法,signalR
用于向客户端广播数据.这样可以增加用户体验的流畅性,还可以减少客户端和ASP.NET服务器之间轮询的开销.
现在的问题是反转SSRV和ASP.NET之间的流程:我想以最有效的方式将数据从SSRV推送到ASP.NET.
SSRV运行昂贵的查询来导入一些外部数据 - 一旦数据被处理,它们也可以通过广播在互联网上共享.
我当前的穷人方法:向Web应用程序(在localhost上)发出POST Http请求以发送数据(我正在使用CLR函数).
处理完数据后,我将它们打包准备好,将HttpWebRequest
它们排入Service Broker中以避免影响其他活动,我就完成了.
我已经注销,SqlDependency
因为它会强制我查询数据 - 这不是一个很大的优势(我会在SQL Server上运行查询的localhost HTTP请求)
与此同时,我觉得应该有一个更简洁的方法来做到这一点.
有什么建议?
嘿家伙我正在开发一个网络应用程序,我想在数据库发生一些变化时,服务器向特定客户端发送响应(如推送通知).我希望将此通知发送到客户端的浏览器.我不想使用民意调查.我能做什么?我认为使用SSE是可能的,但我不清楚.
我想知道
请帮我.