Комета легче в ASP.NET с асинхронными страницами? - PullRequest
5 голосов
/ 18 ноября 2009

Я не хочу спрашивать, легче ли Comet в ASPNET, чем в Jetty? Я имею в виду, Является ли Comet легче в ASPNET или Jetty по сравнению с другими альтернативами? Я думаю, что асинхронные возможности ASP.NET и Jetty делают Comet более масштабируемой при реализации на этих платформах, и я хотел бы это подтвердить.

ASPNET представила «Асинхронные страницы» еще в 2005 году. Идея состояла в том, чтобы применить знакомую модель асинхронности .NET для обработки страниц ASP.NET .

public partial class AsyncPage : System.Web.UI.Page
{
    private WebRequest _request;

    void Page_Load (object sender, EventArgs e)
    {
        AddOnPreRenderCompleteAsync (
            new BeginEventHandler(BeginAsyncOperation),
            new EndEventHandler (EndAsyncOperation)
        );
    }

    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 
        AsyncCallback cb, object state)
    {
        _request = WebRequest.Create("http://msdn.microsoft.com");
        return _request.BeginGetResponse (cb, state);
    }
    void EndAsyncOperation (IAsyncResult ar)
    {
        string text;
        using (WebResponse response = _request.EndGetResponse(ar))
        {
            using (StreamReader reader = 
                new StreamReader(response.GetResponseStream()))
            {
                text = reader.ReadToEnd();
            }
        }

        Regex regex = new Regex ("href\\s*=\\s*\"([^\"]*)\"", 
            RegexOptions.IgnoreCase);
        MatchCollection matches = regex.Matches(text);

        StringBuilder builder = new StringBuilder(1024);
        foreach (Match match in matches)
        {
            builder.Append (match.Groups[1]);
            builder.Append("<br/>");
        }

        Output.Text = builder.ToString ();
    }
}

Q1: Разве это не улучшает масштаб ASP.NET для приложений в стиле Comet? Кто-нибудь использовал это и проверил?

Я думаю, что другие серверные инфраструктуры также имеют нечто подобное. Если я не ошибаюсь, у Jetty есть что-то подобное, чтобы обеспечить лучшее масштабирование в сценариях Comet.

Q2: Может ли кто-нибудь пролить свет на , что ?

1 Ответ

4 голосов
/ 18 ноября 2009

Асинхронная обработка в .NET действительно обеспечивает основу для создания кометных приложений. В частности, это IHttpAsyncHandler, который можно использовать в качестве основы.

Тем не менее, без сторонней библиотеки реализовать Comet с нуля ... сложно. Существует реализация .NET Comet для IIS под названием WebSync , которая сравнивается с Jetty.

...