簡體   English   中英

Web 套接字無法發送消息並與 Game Lift 斷開連接

[英]Web Socket Cannot send message and disconnected from Game Lift

我使用 websocket sharp 開發了一個 game lift 后端服務器。 GameLift 提供的本地測試 function 運行良好,但 Web 套接字無法與 GameLift 服務器創建的 Fleet 游戲 session 通信。

准確的說,連接一開始在客戶端顯示是成功的,但是據說連接馬上就斷開了。 即使連接被標記為成功,也沒有消息到達服務器。

我想知道是否需要使用 web 套接字與 AWS 游戲升降機服務器進行通信。 請幫我。

  • 機隊類型:現貨實例
  • 不使用 TLS
  • EC2 端口設置為 |2022|TCP|0.0.0.0/0

連接的客戶端代碼

public static void AddService(string hostName, int port, string serviceName, WebSocketClientSession socketSession, bool overTls = false)
{
    Dictionary<string, WebSocket> serviceMap = _instance.mServiceMap;
    
    string uri = overTls
        ? $"wss://{hostName}:{port}/{serviceName}"
        : $"ws://{hostName}:{port}/{serviceName}";
    Debug.Log(uri);
    
    WebSocket webSocket = new WebSocket(uri);
    if (overTls)
    {
        webSocket.SslConfiguration.EnabledSslProtocols = SslProtocols.Tls;
    }
    
    webSocket.OnOpen += socketSession.OnOpen;
    webSocket.OnClose += socketSession.OnClose;
    webSocket.OnMessage += socketSession.OnMessage;
    webSocket.OnError += socketSession.OnError;

    serviceMap[serviceName] = webSocket;
}
public static async void ConnectAsync(string serviceName, Action<bool> onCompleted)
{
    Dictionary<string, WebSocket> serviceMap = _instance.mServiceMap;
    WebSocket webSocket = serviceMap[serviceName];
    
    await Task.Run(webSocket.Connect);
    if (webSocket.IsAlive)
    {
        // webSocket.EmitOnPing = true;
        onCompleted?.Invoke(true);
        return;
    }

    onCompleted?.Invoke(false);
}

服務器監聽代碼

public static void StartServer()
{
    _instance.mServer.Start();
    _instance.mHasStarted = true;
}

public static void StopServer()
{
    _instance.mServer.Stop();
    _instance.mHasStarted = false;
}

public static void AddService<T>(string serviceName) where T : WebSocketServerSession, new()
{
    WebSocketServer server = _instance.mServer;
    server.AddWebSocketService<T>($"/{serviceName}");
}

public static void RemoveService(string serviceName)
{
    WebSocketServer server = _instance.mServer;
    server.RemoveWebSocketService($"/{serviceName}");
}

起初嘗試使用TCP和UDP進行通信,但出現了與web socket相同的現象。 一周的時間里進行了各種尋找和嘗試,但沒有任何收獲。 關於游戲升降機的問題很少,因此沒有類似的案例。

即使它不是游戲升降機服務,我也想知道 AWS 連接是否需要其他元素。

它可能是很多不同的東西。 TLS 不匹配、WebSocket 參數協商不匹配、身份驗證等。

我建議更深入地研究電線上發生的事情。 希望它能讓事情變得更清楚,並引導您找到解決方案。

Burp這樣的中間人代理將能夠看到 HTTP 連接,以及后續的 WebSocket 協商。 您需要做的就是通過代理設置將您的應用程序指向它,並將 Burp CA 證書安裝到您的應用程序平台中(這樣它就可以攔截 TLS)。

否則,如果這不是一個選項,您始終可以使用Wireshark (盡管您將無法看到 TLS 內部)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM