我有一個 Node.js 服務器,使用 socket.io 連接 Android 應用程式,我一直在本地托管它,只需在我的 IDE 中運行它并連接到我的本地 IPv4 地址,但我希望它可以作業而不必保留我的 PC不斷運行,所以我嘗試使用 Google Cloud 并設法讓它大部分作業,但客戶端沒有保持連接并始終斷開連接。
在我運行 gcloud app deploy 之后,我按照本教程一直到第 4 步。
我的 Node.js 服務器在一個檔案中,它在頂部有這些宣告。
const express = require("express");
const app = express();
const http = require("http");
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
然后我將它用于初始客戶端連接。
io.on("connection", (socket) => {
console.log("User connected.");
這里面的一切都只是客戶端發出的東西的監聽器,所以我認為它們不是問題。
然后除此之外我還有
server.listen(8080, () => {
console.log("Server is listening");
});
我不知道 package.json 檔案中的任何內容是否相關,但如果需要,我可以提供它。
使用本教程部署到 GCP 后,日志中的一些內容可能是問題背后的原因。
等待網路連接打開。主題:“app/invalid” 地址:127.0.0.1:8080
等待網路連接打開。主題:“app/invalid” 地址:127.0.0.1:8081
等待成功。主題:“應用程式/無效” 地址:127.0.0.1:8080 嘗試次數:97 已用時間:485.916418ms
應用程式正在偵聽埠 8080。我們建議您的應用程式偵聽由 PORT 環境變數定義的埠,以利用埠 8080 上的 NGINX 層。
這些可能有簡單的解決方案,但我對服務器托管的經驗很少。
一旦我的 Android 客戶端連接到服務器,日志就會輸出“用戶已連接”。正如它應該的那樣,然后大約 10 秒后它再次執行此操作并重復此操作。我在連接之間看不到錯誤,只有幾個 socket.io POST/GET 請求。
我嘗試向 app.yaml 添加會話關聯,但也沒有解決。
如果需要在此處進行任何更改,這是我的 app.yaml
runtime: nodejs16
env: standard
instance_class: F1
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: automatic
min_pending_latency: automatic
max_pending_latency: automatic
network:
session_affinity: true
感謝您的幫助,如果我需要提供任何其他檔案,我可以這樣做。
uj5u.com熱心網友回復:
套接字通信需要持久的網路連接。因此,App Engine Flexible提供了一個選項來保持網路連接處于活動狀態。我認為您正在App Engine Standard中部署您的應用程式,它不支持此選項。因此,您可以在App Engine Flexible 中部署您的應用程式,并且您需要在 app.yaml 中包含以下配置
network:
session_affinity: true
有關會話親和力的參考,請參閱此頁面https://cloud.google.com/appengine/docs/flexible/nodejs/using-websockets-and-session-affinity#session_affinity 因此,您更新的 app.yaml 看起來像這個
runtime: nodejs
env: flex
network:
session_affinity: true
有關靈活環境支持的 yaml 配置,請參閱此頁面 - https://cloud.google.com/appengine/docs/flexible/nodejs/reference/app-yaml
uj5u.com熱心網友回復:
您粘貼的訊息很可能并不表示存在問題。您的應用程式在沙盒環境中運行,在您的應用引擎服務首次收到請求時,必須為其初始化容器實體和 Web 服務器。這也稱為加載請求,您看到的訊息表明您的容器實體和網路服務器的啟動。
您可以查看 Google 自己的關于在 node.js 中處理請求的檔案或遵循快速入門指南。
如果在斷開連接期間沒有其他日志,我建議您檢查配額以查看您是否沒有超過任何配額。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/361598.html
標籤:安卓 节点.js 谷歌应用引擎 谷歌云平台 socket.io
下一篇:400.那是一個錯誤。您的客戶發出了格式錯誤或非法的請求。這就是我們所知道的-GoogleAppEngineDjangoApp
