在Django中构建聊天应用程序时,我应该如何实现反向AJAX?我看过Django-Orbited,根据我的理解,这会将一个彗星服务器放在HTTP服务器前面.如果我只是运行Django开发服务器,这似乎很好,但是当我开始从mod_wsgi运行应用程序时,这是如何工作的?如何让轨道服务器处理每个请求规模?这是正确的方法吗?
我已经看过另一种方法(长轮询)似乎会起作用,虽然我不确定会涉及到什么.客户端是否会请求一个可以存放在自己的线程中的页面,以免阻塞其余的应用程序?它会阻止吗?客户要求的脚本是否必须不断轮询信息?
哪种方法更合适?哪个更便携,可扩展,更理智等?除了客户端查询消息之外,还有其他一些我忽略的好方法吗?
我目前正在使用 Node.js 在服务器和 web/iPhone/Blackberry 客户端上编写一个简单的跨平台应用程序。带宽和延迟要求类似于您在 IRC“派对游戏”或任何聊天系统中看到的内容。我已经使用 HTTP 长轮询(双向使用 JSON)开发了 Web 客户端。
对于 iPhone/blackberry,我可以使用内置的 HTTP 库与我当前的实现对话,或者我可以在服务器上编写一个套接字侦听器并使用套接字与它对话。这样做有什么好处吗?为什么不鼓励非浏览器 HTTP 客户端?
我想知道Google Analytics Real Time用户界面是如何工作的,技术是什么?他们是否使用来自客户端的长轮询来通过从服务器向客户端提供实时信息来使UI统计信息保持最新?我只是在网络标签上打开Chrome开发工具,https://www.google.com/analytics/realtime/bind上有无限请求 有人知道这个伎俩吗?它完美无瑕......
有没有办法在不破坏XHR对象的情况下清除XHR对象的responseText?
我需要保持对Web服务器的持久连接,以将实时数据提供给浏览器.问题是,有相对大量的数据通过(每秒几百K),因此内存使用是一个大问题,因为此连接必须保持打开至少几分钟.responseText变得非常快,即使我发回的JSON已经被碾压得尽可能小.
由于服务器端应用程序的工作方式,如果我使用AJAX样式的短轮询并且在完成它时只破坏XHR对象,我会错过大量的重要数据,即使在解析它的几毫秒内也是如此.响应,创建一个新的XHR并将其发送出去.我没有选择使用重叠请求,因为Web服务器一次只接受一个连接.(不要问.)所以Comet正是我需要的模型.
我想要做的是解析从服务器返回的每个JSON块,然后清除responseText以便我可以继续使用相同的连接.但是,responseText是只读的.它不能通过我找到的任何方法直接清空.
我在这里缺少一部分照片吗?当我读完它时,有没有人知道我可以用来释放responseText的任何技巧?或者服务器响应可以到达另一个地方吗?
我不包括代码,因为这几乎是一个与代码无关的问题.生成XHR并处理返回数据的Javascript例程非常非常简单.
据说不建议将IIS用于Comet编程.如果这是真的,那么其他Web服务器如何能够通过IIS处理这个问题.那么其他Web服务器还能做什么呢?它们可以扩展出来.
使用iframe进行Comet长轮询有什么好处?为什么不将脚本文件中的异步ajax请求保存到主页面?谢谢.
我正在尝试尝试Comet.我开发了一个非常简单的聊天网络应用程序 - 基本上是通过c#的彗星问候世界.我遇到的问题是IIS有时会崩溃,崩溃我的意思是它只是停止响应HTTP请求.然后,它需要重新启动应用程序池,有时甚至是整个IIS服务.我几乎肯定是罪魁祸首是我用来阻止彗星请求线程的ManualResetEvent对象,直到收到释放(更新)这些线程的信号.我尝试编写一个HTTP处理程序来解决这个问题并将可重用属性设置为false(将新请求线程放在另一个ManualResetEvent对象实例上),但这不起作用.我也在尝试实现IRegisteredObject,这样我就可以在应用程序关闭时释放那些theads,但这似乎也不起作用.它仍然崩溃,并且它崩溃时似乎没有任何模式(我已经注意到了).我几乎可以肯定它是静态实例的组合以及导致它的ManualResetEvent的使用.我只是不确定如何或如何解决这个问题.
Comet.cs(我的简单彗星lib)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net.Mail;
using System.Web.Hosting;
namespace Comet
{
public class CometCore : IRegisteredObject
{
#region Globals
private static CometCore m_instance = null;
private List<CometRequest> m_requests = new List<CometRequest>();
private int m_timeout = 120000; //Default - 20 minutes;
#endregion
#region Constructor(s)
public CometCore()
{
HostingEnvironment.RegisterObject(this);
}
#endregion
#region Properties
/// <summary>
/// Singleton instance of the class
/// </summary>
public static CometCore Instance
{
get
{
if (m_instance …Run Code Online (Sandbox Code Playgroud) 问题:需要每天向网络用户提供数百万个实时通知.
要求:
到目前为止,我已经提出了一些具有各种限制的解决方案:
RabbitMQ + node.js + Socket.IO
到目前为止,这是我最喜欢的解决方案,但是当涉及大量请求时,有人抱怨node.js部分的可靠性.plurk.com的经验http://amix.dk/blog/post/19577
XMPP/BOSH + strophe.js
这看起来也很可靠但是由于BOSH的限制,JSONP轮询是不可能的,因此 - 没有跨域请求.
Mochiweb + Dojo
据称Facebook使用Mochiweb作为他们的聊天系统(这很糟糕).似乎设置和维护太复杂了.我错了吗?
JBoss Netty
Java服务器.这是plurk.com用于提供通知的内容.目前还不清楚浏览器端可以使用什么.
Faye + node.js
非常容易设置,但似乎它在重负载下不能很好地工作,没有经过测试,并且没有明确的扩展方法.
任何想法或经验?:)
我正在尝试更新旧的cometd javascript包装和测试客户端(是1.3.x),我有更新的彗星2.5.1 javascript实现.我有所有的依赖项,浏览器可以找到它们,但我在Firebug的控制台中遇到错误(见下文)

我的HTML主管如下:
<head>
<title>CometD Tester</title>
<link rel="stylesheet" type="text/css"href="style/style.css" />
<script type="text/javascript" src="org/cometd/Cometd.js"></script>
<script type="text/javascript" src="org/cometd/AckExtension.js"></script>
<script type="text/javascript" src="org/cometd/ReloadExtension.js"></script>
<script type="text/javascript" src="jquery/jquery-1.9.0.js"></script>
<script type="text/javascript" src="jquery/jquery.cookie.js"></script>
<script type="text/javascript" src="jquery/jquery.cometd.js"></script>
<script type="text/javascript" src="jquery/jquery.cometd-reload.js"></script>
<script type="text/javascript" src="js/myCometd.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
所有这些都是由浏览器找到的.看着Cometd.js我看到以下内容:
org.cometd.Cometd = function(name)
{
....
}
Run Code Online (Sandbox Code Playgroud)
那不是定义org吗?请注意,控制台中没有任何错误来自Cometd.js.否则我看不到"org.cometd"的其他定义.如果有人能帮助我,我将非常感激.我使用的是Tomcat 7,以下是dir结构:

谢谢.
更新 - 进一步测试
我将标题缩减为:
<head>
<title>CometD Tester</title>
<link rel="stylesheet" type="text/css"href="style/style.css" />
<script type="text/javascript" src="org/cometd/Cometd.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
并从index.html中删除了所有JS.现在唯一包含的JS是来自comet.org的Cometd.js.仍然存在相同的错误......来自该脚本的第一行:
org.cometd.Cometd = function(name)
Run Code Online (Sandbox Code Playgroud)
不知道我错过了什么.
编辑 - 添加jquery.cometd-reload.js 这是文件的内容.看起来它是来自cometd库的"重新绑定"功能,而不是使用jquery(?).我在JS中没有足够的速度来调试它(我真的是一个C++开发者).
(function($)
{
function bind(org_cometd, cookie, ReloadExtension, …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Struts 2作为框架,并且需要具有Websocket功能,以便可以与通过HTML Websocket访问它的客户端进行通信。
我试图将Java Websocket API(JSR 356)与在Tomcat 7.0.56上运行的Java应用程序一起使用。但是,当我在Struts 2框架上尝试时,它不起作用。
我所做的一些研究表明,可能是因为Struts 2映射URL的方式,但无济于事,我仍然无法与服务器上的Websocket端点进行通信。
有谁知道如何使用Struts 2框架实现Websocket?
我用于websocket的代码如下:
@ServerEndpoint("/mssendpoint")
public class MSSEndpoint {
public static Logger logger = Logger.getLogger(MSSEndpoint.class);
/* Queue for all open WebSocket sessions */
static Queue<Session> queue = new ConcurrentLinkedQueue<Session>();
static Set<WebsocketListener> listeners = new HashSet<WebsocketListener>();
public static void send(String msg) {
try {
/* Send updates to all open WebSocket sessions */
for (Session session : queue) {
session.getBasicRemote().sendText(msg);
logger.info("Sent: " + msg);
}
}
catch (IOException e) {
logger.error(e.toString()); …Run Code Online (Sandbox Code Playgroud) comet ×10
javascript ×5
ajax ×4
long-polling ×4
iis ×2
.net ×1
blackberry ×1
c# ×1
django ×1
iphone ×1
java ×1
jquery ×1
networking ×1
node.js ×1
python ×1
responsetext ×1
reverse-ajax ×1
scalability ×1
struts2 ×1
websocket ×1