首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 實現 Reverse Ajax (Comet) 長連線即時聊天範例

     編輯:ASP.NET 基礎

Reverse Ajax 概念

傳統 Ajax 由客戶端發起請求;Reverse Ajax (Comet) 讓伺服器主動推送訊息至客戶端。核心技術為 **長連線 (Long Polling)**:客戶端發出請求,伺服器保持連線直到有資料才回應,客戶端收到後立即發出下一個請求。

ASP.NET 非同步頁面實作

<%@ Page Language="C#" Async="true" AsyncTimeout="30" EnableSessionState="False" %>
");
        Response.Flush();
        Response.End(); // 結束長連線
    }

ChatTask 非同步邏輯

public class ChatTask
{
    HttpContext _ctx;
    public Action OnMessageReceived;

    public ChatTask(HttpContext ctx) { _ctx = ctx; }

    public IAsyncResult BeginProcess(object sender, EventArgs e, AsyncCallback cb, object state)
    {
        // 模擬等待新訊息 (實際應用用訊息佇列/資料庫輪詢)
        return new ManualAsyncResult(cb, state);
    }

    public void EndProcess(IAsyncResult ar) { }
    public void TimeoutProcess(IAsyncResult ar) { }
}

前端 JavaScript 長輪詢

function startPoll(user) {
    $.post("response.aspx", { type: "loop", user: user }, function() {
        // 連線結束 (收到訊息或逾時) 立即重新發起
        startPoll(user);
    });
}
function receiveMsg(user, msg) {
    $("#chatBox").append(`
${user}: ${msg}
`); } $(function() { startPoll("User1"); });

注意事項

  • EnableSessionState="False" 避免 Session 鎖定導致併發阻塞。
  • IIS 需設定 applicationPool idleTimeout 較長,或使用 WebSocket (ASP.NET 4.5+ / SignalR) 取代長輪詢。
  • 生產環境建議改用 SignalR,自動處理重連、擴展、傳輸協定協商。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved