Показать сообщение отдельно
  #1 (permalink)  
Старый 21.01.2011, 18:03
Новичок на форуме
Отправить личное сообщение для max.arshinov Посмотреть профиль Найти все сообщения от max.arshinov
 
Регистрация: 21.01.2011
Сообщений: 6

comet - бесконечный IFRAME
Привет, Илья! Хочу сделать чат с помощью 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 кажется не лучшим решением. Куда копать?

Последний раз редактировалось Илья Кантор, 21.01.2011 в 19:11.
Ответить с цитированием