过去三周我一直在尝试构建一个基于Web的聊天应用程序,我正面临着构建它所采用的任何路径(编程技术/技术)的问题.我已经解释了我在下面的所有问题中遇到的问题.请提供您对此的任何见解.
ASP.NET,AJAX
WCF双工
遗憾的是,我在此尝试构建WCF双工服务时浪费了相当多的时间,该服务维护所有客户端并在需要时通过通道调用客户端.但我最近了解到 WCF双工回调不适用于ASP.NET(因为http是请求和响应类型).我正在关注这篇伟大的文章来构建一个双工服务.
Comet/ReverseAjax/HTTP Server推送
我对这种技术非常陌生,并且想知道它能够扩展得多好.我对这个编程技术在这里第一眼后在维基和彗星由Alex第一篇文章在这里,我才知道,客户始终保持其可以被服务器用来推动一个开放的连接(长住AJAX调用)服务器"在服务器中发生的有趣事件"到浏览器(客户端).那么它的规模有多大?如果IIS中的开放连接的最大数量超过此类或任何其他问题,该怎么办?
Jabber服务器/客户端(XMPP)
我看到大多数可以在网上看到的着名聊天应用程序都在使用Jabber.我还了解到从头开始编写Jabber服务器是一项繁琐的工作.我有应用程序的单独的用户配置文件存储.我可以轻松地将它与Jabber集成吗?我可以私下托管的任何开源Jabber服务器?(我见过很多开源工具来轻松构建客户端)
提供的任何见解都非常感谢.
谢谢
NLV
我正在尝试在我的网站上创建一个页面,实时显示新上传的项目。
我认为每 3 秒调用一次Ajax 脚本将是解决此问题的最佳方法,但是我的网站并没有经常获得新上传的项目。它也是如此多变,在 30 秒到 1 小时之间!
此外,每 3 秒调用一次脚本对我的服务器来说是相当费力的,尤其是当很多人都在同一页面上时。
我一直在寻找类似 PHP 推送通知的东西。虽然这看起来很牵强,但我正在寻找一些东西,当有人将某些内容上传到网站时,上传脚本会告诉提要页面进行更新。
我看到了一个叫做 COMET 的东西——虽然阅读文章/教程让我更加困惑。
那么,实现不断更新页面的最佳方法是什么?
我打算在Django中编写一个彗星应用程序,但据我所知,关于这个主题的文章很少,而且可用的彗星库不一定适合与Django一起使用(特别是开发环境).
到目前为止,我见过的最好的选项(有一篇关于如何在Django中开始的文章)是APE和Orbited.然而,Orbited似乎仍然没有被积极开发(easy_install甚至不起作用,域名已经过期),APE应该可以正常工作,但是如何使用它python manage.py runserver?
所以我的问题是 - 如果你在Django中编写一个彗星应用程序,最常用的库是什么?
我打算用gevent-socketio建立一个实时服务(由Jeffrey Gelens发布).出于某些目的,我需要使用许多gevent-socketio服务器来扩展我的服务.我认为它可以用作反向代理(如nginx),用于跨多个Comet服务器分发请求,并使用另一台服务器作为中央会话数据存储,是不是?
我正在尝试修改gevent-socketio源代码,但这对我来说相当困难.
如果我有JBoss Errai(我为了服务器推送而下载),使用GWT-RPC进行客户端调用还有什么好处吗?或者如果我只是使用Errai调用一切,客户端和服务器端,我会失去什么?它可以发送所有相同的数据类型,并且它也可以像GWT-RPC一样用于客户端发起的调用吗?
我正在开发一个连接到服务器的Web应用程序,我需要服务器在给定时间将一些信息提供给客户端.
因此,我开始阅读有关服务器发送事件(SSE)的信息,因为该网站是在HTML5上开发的,而SSE似乎非常符合我的要求.但是,当我读到SSE真正在做的事情是将客户端的请求发送到服务器而不是相反的方式时,我感到非常惊讶(昨天我认为我理解长轮询是一种推送仿真).因此,我开始阅读有关Web套接字的内容(但它标注了该标准仍然是草案)并且还看了一下Comet.但我认为我不能完全理解我的想法.
有人会突出显示适合我的问题的这些技术(也许还有其他一些技术),哪种情况更适合每一种?
非常感谢,我想我完全迷失在这个领域.
我正在使用 Servlet 3.0 的javax.servlet.AsyncContext接口实现服务器发送的事件。
但是,我无法理解我应该如何处理对等断开连接等 I/O 错误。
对于给定的AsyncContext ac = request.startAsync(),我可以调用ac.getResponse().getWriter().print(something)然后ac.getResponse.getWriter().flush()它工作正常。但是,当客户端断开连接时,我不会收到错误消息——即使我附加了一个侦听器,onError也不会调用它的方法。
我用 Jetty 8 和 Tomcat 7 对它进行了测试,似乎与客户端的断开连接没有报告给应用程序。
如何检测通信错误?
我们希望建立一个实时价格变动系统,以便能够看到竞争对手价格与产品价格的差异.
我们没有使用Javascript和PHP的推送通知/ COMET系统的经验.如果你不介意,我想得到你的经验,对这种技术的建议.所以这是我的问题:
有人可以解释一下“Forever Frame”技术是如何工作的吗?一个代码示例会很棒!我浏览了可以在 Google 上找到的所有材料,但我仍然不太了解它是如何工作的。
我知道我可能应该使用 WebSockets 或服务器端事件,但是涉及将分块数据从服务器写入iFrame或作为对 的响应的 Comet Streaming 技术发生了xmlHttpRequest什么?我偶然发现了多个演示,但它们都不再按预期工作,而且由于这种类型的流媒体上的大部分材料都很旧,我想知道它在 2015 年是否仍然可行?
为了清楚起见,我指的是 Comet 技术,其中服务器使用分块传输编码即时刷新新数据来保持连接打开。浏览器中的增量渲染应该可以使这些数据可用,无论是在iFrame(例如“Forever iFrame”)的情况下还是通过在返回时读取对象的responseText属性(例如“XHR流”)。然而,所有浏览器似乎都会缓冲数据直到连接关闭,无论我在开始发送真实数据之前添加了多少虚假的前导码。另外,我指的不是set to仅适用于 Firefox的特殊情况,而是一种似乎在几年前适用于大多数浏览器的方法。xmlHttpRequestreadyState3Content-Typemultipart/x-mixed-replace
有谁知道当前的浏览器行为是否已经淘汰了这些 Comet 流技术?
示例演示:
responseText通过xmlHttpRequest对象轮询负载:
http://ajaxify.com/run/streaming/xmlHttpRequest/countdown/ http://ajaxify.com/run/streaming/xmlHttpRequest/
常规页面加载缓慢,增量渲染不适合我:
http://ajaxify.com/run/streaming/
iFrame缓慢iFrame加载时轮询内容:
http://ajaxify.com/run/streaming/xmlHttpRequest/iframe/
这些演示不使用分块传输编码,但产生的行为是相同的,即不发生增量渲染。
关于彗星流的文章:
http://cometdaily.com/2007/11/05/the-forever-frame-technique/
短版结论:
所有 Comet 技术仍然有效,但是,在我的情况下,防病毒软件以不可预见的方式阻碍了事情的发展,因此请确保在不同的计算机和安全模式下进行测试,以确保它是否不起作用!