首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS GCDAsyncSocket 即時通訊架構:雙向監聽與伺服器轉發

     編輯:程式設計疑難解答

架構圖解

Client A (Socket) ←→ Server ←→ Client B (Socket)
   Port 5000           Port 5000           Port 5000

關鍵步驟

  1. 雙方各自建立 GCDAsyncSocket,綁定本地埠(如 5000),啟動監聽 socket.acceptOnPort(5000)。
  2. 伺服器維護 Map 線上用戶連線。
  3. A 發送訊息 → 伺服器根據目標 userId 查找 B 的 Socket → 轉發資料。
  4. B 監聽到資料 → 解析 → 更新 UI。

代碼片段

// Client 端
GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[socket acceptOnPort:5000 error:nil];
// 發送
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[socket writeData:data withTimeout:-1 tag:0];

// Server 端轉發
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
    // 解析目標 userId
    GCDAsyncSocket *targetSocket = onlineUsers[targetId];
    [targetSocket writeData:data withTimeout:-1 tag:0];
}

注意

  • 需處理斷線重連、心跳保活(定時發送 Ping)。
  • 生產環境建議使用成熟 IM 框架(如 OpenIM、Hyphenate)或 WebSocket + 消息佇列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved