Привет, Илья! Хочу сделать чат с помощью COMET. Транспорт - бесконечный Iframe. Начал с того, что попытался реализовать потоковую передачу:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
iframe{
width: 500px;
height: 600px;
}
</style>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var d = $(document.createElement('iframe'));
d.appendTo('form');
d.attr('src', '/stream.axd');
});
</script>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>
stream.axd - открывает поток и никогда не заканчивается, как только поступает сообщение stream.axd?add=SomeMessage это сообщение выводится в поток вот так:
var i = 0;
var time = 0;
ThreadPool.QueueUserWorkItem(new WaitCallback(x =>
{
// тут надо будет изредка сбрасывать потоки
while (true)
{
Thread.Sleep(2000);
if (i != chat.Count)
{
for (var j = i; j < chat.Count; j++)
{
context.Response.Write(chat[j] + "\n");
//context.Response.Write("<script type=\"text/javascript\">\nalert('" + chat[j] + "');\n</script>");
}
try
{
context.Response.Flush();
}
catch (Exception E)
{
//throw E;
ar.Complete(String.Empty, false);
break;
}
i = chat.Count;
}
}
ar.Complete(String.Empty, false);
}));
Файрфокс, Опера и AS3 проявили себя хорошо и в IFrame (или UrlStream для AS3) попадают сообщения, а вот ИЕ и ВебКит ничего не выводят, пока документ не загрузится

( Если использовать long pool, то все ок. Но мне надо сделать чат, так что long pool кажется не лучшим решением. Куда копать?