{ "version": "https://jsonfeed.org/version/1", "title": "Google App Engine", "description": "
Google \u7684\u516c\u5171\u4e91\u8ba1\u7b97\u5e73\u53f0 App Engine\uff0c\u597d\u7528\uff0c\u514d\u8d39\u7684\u4e0b\u4e00\u4ee3\u7f51\u7ad9\u642d\u5efa\u6280\u672f\u3002", "home_page_url": "go/gae", "feed_url": "feed/gae.json", "icon": "https://cdn.v2ex.com/navatar/aab3/2389/14_large.png?m=1545925484", "favicon": "https://cdn.v2ex.com/navatar/aab3/2389/14_normal.png?m=1545925484", "items": [ { "author": { "url": "member/Michaol", "name": "Michaol", "avatar": "https://cdn.v2ex.com/avatar/4ce5/6378/476630_large.png?m=1587346385" }, "url": "t/1174422", "title": "\u7ed9\u8fd8\u6ca1\u80fd\u5728 Windows \u767b\u5f55 Antigravity \u7684\u540c\u5b66\u591a\u4e00\u6761\u8def\u8bd5\u8bd5", "id": "t/1174422", "date_published": "2025-11-22T12:58:46+00:00", "content_html": "

\u89e3\u51b3 Antigravity Google \u767b\u5f55\u5931\u8d25\u7684\u8be6\u7ec6\u6307\u5357

\n

\u5982\u679c\u5728\u4f7f\u7528 Antigravity \u65f6\u70b9\u51fb \"Sign in with Google\" \u6ca1\u6709\u53cd\u5e94\u6216\u65e0\u6cd5\u8df3\u8f6c\uff0c\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u624b\u52a8\u5b8c\u6210\u6388\u6743\u3002

\n

\u6b65\u9aa4 1\uff1a\u542f\u52a8 Antigravity \u8c03\u8bd5\u6a21\u5f0f

\n
    \n
  1. \u6253\u5f00\u7b2c\u4e00\u4e2a PowerShell \u7a97\u53e3\u3002
  2. \n
  3. \n\u8fdb\u5165\u7a0b\u5e8f\u76ee\u5f55\uff08\u8bf7\u5c06 <username> \u66ff\u6362\u4e3a\u60a8\u7684\u5b9e\u9645 Windows \u7528\u6237\u540d\uff09\uff1a
    cd \"C:\\Users\\<username>\\AppData\\Local\\Programs\\Antigravity\"\n
    \n
  4. \n
  5. \n\u4f7f\u7528\u8c03\u8bd5\u7aef\u53e3\u542f\u52a8\u7a0b\u5e8f\uff1a
    .\\Antigravity.exe --inspect=9229\n
    \n
  6. \n
  7. \n\u5728\u5f39\u51fa\u7684 Antigravity \u7a97\u53e3\u4e2d\uff0c\u70b9\u51fb **\"Sign in with Google\"**\u3002\n
  8. \n
  9. \n\u56de\u5230 PowerShell \u7a97\u53e3\uff0c\u5bfb\u627e\u7c7b\u4f3c\u4ee5\u4e0b\u7684\u65e5\u5fd7\u8f93\u51fa\uff0c\u5e76\u8bb0\u4e0b\u7aef\u53e3\u53f7\uff08\u4f8b\u5982 11819\uff09\uff1a
    \n

    [Auth] Localhost server listening on port 11819

    \n
    \n
  10. \n
\n

\u6b65\u9aa4 2\uff1a\u751f\u6210\u6388\u6743\u94fe\u63a5

\n
    \n
  1. \u4fdd\u6301\u7b2c\u4e00\u4e2a\u7a97\u53e3\u4e0d\u52a8\uff0c\u6253\u5f00 \u7b2c\u4e8c\u4e2a PowerShell \u7a97\u53e3\u3002
  2. \n
  3. \u590d\u5236\u5e76\u8fd0\u884c\u4ee5\u4e0b\u5b8c\u6574\u811a\u672c\uff1a
  4. \n
\n
# 1. \u8f93\u5165\u7aef\u53e3\u53f7\n$port = Read-Host \"Enter the port from the log\"\n\n# 2. \u8bbe\u7f6e\u56de\u8c03\u5730\u5740\n$redirect = [uri]::EscapeDataString(\"http://localhost:$port/oauth-callback\")\n\n# 3. \u8bbe\u7f6e Scope\n$scope = [uri]::EscapeDataString(\n \"https://www.googleapis.com/auth/cloud-platform \" +\n \"https://www.googleapis.com/auth/userinfo.email \" +\n \"https://www.googleapis.com/auth/userinfo.profile \" +\n \"https://www.googleapis.com/auth/cclog \" +\n \"https://www.googleapis.com/auth/experimentsandconfigs\"\n)\n\n# 4. \u8bbe\u7f6e Client ID\n$clientId = \"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com\"\n\n# 5. \u751f\u6210\u968f\u673a State\n$state = [uri]::EscapeDataString([guid]::NewGuid().ToString())\n\n# 6. \u62fc\u63a5\u6700\u7ec8 URL\n$url = \"https://accounts.google.com/o/oauth2/v2/auth\" +\n \"?client_id=$clientId\" +\n \"&redirect_uri=$redirect\" +\n \"&response_type=code\" +\n \"&scope=$scope\" +\n \"&access_type=offline\" +\n \"&prompt=consent\" +\n \"&state=$state\"\n\n# 7. \u5c1d\u8bd5\u6253\u5f00\u6d4f\u89c8\u5668\nWrite-Host \"Opening browser...\" -ForegroundColor Green\nStart-Process $url\n
\n

\u6b65\u9aa4 3\uff1a\u5b8c\u6210\u9a8c\u8bc1

\n
    \n
  1. \u811a\u672c\u8fd0\u884c\u540e\u4f1a\u63d0\u793a\uff1aEnter the port from the log:\u3002
  2. \n
  3. \u8f93\u5165\u6b65\u9aa4 1 \u4e2d\u83b7\u53d6\u7684\u7aef\u53e3\u53f7\uff08\u4f8b\u5982 11819\uff09\u5e76\u56de\u8f66\u3002
  4. \n
  5. \u6b64\u65f6\u9ed8\u8ba4\u6d4f\u89c8\u5668\u5e94\u81ea\u52a8\u5f39\u51fa Google \u767b\u5f55\u754c\u9762\u3002
  6. \n
  7. \u767b\u5f55\u5e76\u70b9\u51fb\u5141\u8bb8\uff0c\u6388\u6743\u5b8c\u6210\u540e\u6d4f\u89c8\u5668\u901a\u5e38\u4f1a\u8df3\u8f6c\u6216\u663e\u793a\u65e0\u6cd5\u8fde\u63a5\uff08\u8fd9\u662f\u6b63\u5e38\u7684\uff09\uff0c\u6b64\u65f6 Antigravity \u5ba2\u6237\u7aef\u5e94\u5df2\u6210\u529f\u767b\u5f55\u3002
  8. \n
\n

\u5e38\u89c1\u95ee\u9898\u5904\u7406

\n

\u5982\u679c\u8fd0\u884c\u811a\u672c\u540e\u6ca1\u6709\u81ea\u52a8\u5f39\u51fa\u6d4f\u89c8\u5668\uff0c\u8bf7\u5728\u7b2c\u4e8c\u4e2a PowerShell \u7a97\u53e3\u4e2d\u7ee7\u7eed\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\uff1a

\n
Write-Host $url\n
\n

PowerShell \u4f1a\u6253\u5370\u51fa\u5b8c\u6574\u7684\u957f\u94fe\u63a5\u3002\u8bf7\u590d\u5236\u8be5\u94fe\u63a5\u624b\u52a8\u7c98\u8d34\u5230\u6d4f\u89c8\u5668\u5730\u5740\u680f\u8bbf\u95ee\u5373\u53ef\u3002

\n
\n

\u63d0\u793a\uff1a\u6b64\u65b9\u6cd5\u56e0\u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u6d4f\u89c8\u5668\u8fdb\u884c\u9a8c\u8bc1\uff0c\u7ecf\u6d4b\u8bd5\u5728\u90e8\u5206\u7f51\u7edc\u53d7\u9650\u73af\u5883\uff08\u5982\u5927\u9646\u767d\u540d\u5355\u6a21\u5f0f\uff09\u4e0b\u4e5f\u80fd\u987a\u5229\u901a\u8fc7\uff0c\u65e0\u9700\u989d\u5916\u914d\u7f6e\u4ee3\u7406\u3002

\n
\n" }, { "author": { "url": "member/AniTou", "name": "AniTou", "avatar": "https://cdn.v2ex.com/avatar/919b/9a50/608835_large.png?m=1741535902" }, "url": "t/1074608", "title": "Google Map \u8bc4\u4ef7\u4e0d\u4e86\u5546\u94fa", "id": "t/1074608", "date_published": "2024-09-21T05:57:20+00:00", "content_html": "\u8fd9\u662f\u4e0d\u662f\u5730\u533a\u5c4f\u853d\u7684\u5173\u7cfb\uff1f\u6709\u6ca1\u6709\u4ec0\u4e48\u529e\u6cd5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\uff1f" }, { "author": { "url": "member/liangming1", "name": "liangming1", "avatar": "https://cdn.v2ex.com/avatar/d09f/65a1/182361_large.png?m=1468831017" }, "url": "t/789118", "title": "\u5173\u4e8e GCP \u673a\u5668\u591a\u7f51\u5361\u3001\u591a\u516c\u7f51 IP \u914d\u7f6e\uff0c\u6025\u6025\u6025.", "id": "t/789118", "date_published": "2021-07-12T13:17:18+00:00", "content_html": "

\u5173\u4e8e GCP \u673a\u5668\u591a\u7f51\u5361\u3001\u591a\u516c\u7f51 IP \u914d\u7f6e\uff0c\u6309\u7167\u5b98\u65b9\u6587\u6863\u7ed9\u51fa\u7684\u64cd\u4f5c\uff0c

\n

sudo ifconfig eth1 172.18.0.2 netmask 255.255.255.255 broadcast 172.18.0.2 mtu 1430\necho \"1 rt1\" | sudo tee -a /etc/iproute2/rt_tables\nsudo ip route add 172.18.0.1 src 172.18.0.2 dev eth1 table rt1\nsudo ip route add default via 172.18.0.1 dev eth1 table rt1\nsudo ip rule add from 172.18.0.2/32 table rt1\nsudo ip rule add to 172.18.0.2/32 table rt1

\n

\u7b2c\u4e8c\u7f51\u5361\u901a\u7f51\u4e86\u4e4b\u540e\uff0c\u4e3a\u4ec0\u4e48\u7b2c\u4e8c\u7f51\u5361\u7684 ip \u53ea\u80fd\u8bbf\u95ee 22 \u7aef\u53e3\uff0c80\uff0c443 \u4e4b\u7c7b\u7684\u5168\u90fd\u4e0d\u901a\uff1f\u8bf7\u5404\u4f4d\u5927\u795e\u4e0d\u541d\u8d50\u6559\uff0c\u6025\u6025\u6025\u3002

\n" }, { "author": { "url": "member/casparchen", "name": "casparchen", "avatar": "https://cdn.v2ex.com/avatar/79a0/021f/36771_large.png?m=1401677186" }, "url": "t/779945", "title": "\u5c0f\u7f51\u7ad9\u642d\u5728 GAE + CloudFlare \u4e0a", "id": "t/779945", "date_published": "2021-05-28T17:23:20+00:00", "content_html": "GAE \u514d\u8d39\u989d\u5ea6\u591f\u7528\uff0c\u4e5f\u652f\u6301\u7ed1\u57df\u540d\uff0cCloudFlare \u4e5f\u652f\u6301 HTTPS

\u7ecf\u5e38\u89c1\u5230\u95ee\u4e2a\u4eba\u535a\u5ba2\u653e\u5728\u54ea\u513f\u3002\u4e3a\u4ec0\u4e48\u5f88\u5c11\u6709\u4eba\u63d0\u5230 GAE + CloudFlare \u5462\uff1f" }, { "author": { "url": "member/suotm", "name": "suotm", "avatar": "https://cdn.v2ex.com/avatar/c219/6528/467123_large.png?m=1595669335" }, "url": "t/650600", "date_modified": "2020-03-07T00:22:46+00:00", "content_html": "

\u4e00\u76f4\u6709 2 \u4e2a python 2.7 \u7684\u5b9e\u4f8b\u722c\u866b\u5728\u9ed8\u9ed8\u5de5\u4f5c\u6570\u5e74\uff0c\u524d\u51e0\u5929 push \u4e86\u4e00\u6bb5\u65b0\u7684\u4ee3\u7801\uff0c\u63d0\u793a\u9700\u8981\u7ed1\u5b9a\u8d26\u5355\u624d\u80fd\u7ee7\u7eed\u3002

\n

\u518d\u770b\u770b\u63d0\u793a\uff0c\u8bf4\u660e\u4e86 3 \u6708\u5e95\u5c31\u4f1a\u505c\u7528\u6240\u6709\u672a\u7ed1\u5b9a\u8d26\u5355\uff08\u4fe1\u7528\u5361\uff09\u7684\u5b9e\u4f8b\u3002

\n

\u6628\u5929\u82b1\u4e86\u4e00\u5929\u65f6\u95f4\u4fee\u6539\u4ee3\u7801\u642c\u8fc1\u5230\u81ea\u5df1\u7684 VPS \u4e0a\uff0c\u4e3a\u81ea\u5df1\u4ee5\u524d\u7701\u94b1\u4e70\u5355\u3002

\n

\u4e0d\u60f3\u518d\u7528 GAE \u8fd9\u79cd\u592a\u591a\u7279\u5b9a api \u7684\u6258\u7ba1\u5e73\u53f0\u4e86\u3002

\n", "date_published": "2020-03-07T00:21:48+00:00", "title": "GAE 3 \u6708\u5e95\u8fd8\u6ca1\u7ed1\u5b9a\u8d26\u5355\uff0c\u5b9e\u4f8b\u5c31\u4f1a\u88ab\u505c\u7528", "id": "t/650600" }, { "author": { "url": "member/AsiaToyo", "name": "AsiaToyo", "avatar": "https://cdn.v2ex.com/avatar/6a6f/0d12/417424_large.png?m=1560607513" }, "url": "t/613489", "date_modified": "2019-10-27T15:49:52+00:00", "content_html": "

\u4eca\u665a\u6bd4\u8f03\u5947\u602a\uff0c\u4e0d\u6302\u4ee3\u7406\u5c45\u7136\u9032\u53bb https://cloud.google.com/appengine/\n\u5e76\u4e14\u80fd\u5920\u767b\u9678\uff0cgooge.com \u3001\u63a8\u7279\u662f\u4e0d\u80fd\u6253\u958b\u7684\u3002\u7279\u5730\u91cd\u5553\u5e7e\u904d\u7d50\u679c\u9084\u662f\u4e00\u6a23\u3002\u7528\u4e86 http://ip-check.info/?lang=en\n\u6aa2\u67e5\u5e7e\u904d\u78ba\u5b9a\u662f\u672c\u6a5f ip\u3002\u800c\u4e14\u7279\u5730\u9023\u63a5\u4e00\u500b\u7121\u6548\u7684\u4ee3\u7406\u518d\u65b7\u958b\u3002\u4f30\u8a08\n\u7c21\u55ae\u6e2c\u8a66\u4e09\u81fa\u6a5f\u5668\u90fd\u53ef\u4ee5\u3002\u4e00\u81fa\u5be6\u9a57\u5ba4\u7684\u52d9\u5668\u548c\u963f\u91cc\u96f2\u5e36\u5bec\u5f88\u5c0f\u8df3\u8f49\u767b\u9678\u90a3\u88cf\u52a0\u8f09\u5f88\u6162\u3002\n\u95dc\u6a5f\u7761\u89ba\u3002\u665a\u9ede\u518d\u8aac

\n", "date_published": "2019-10-27T15:49:02+00:00", "title": "\u8c8c\u4f3c\u4e0d\u6302\u4ee3\u7406\u4e5f\u80fd\u9032\u8c37\u6b4c\u4e91", "id": "t/613489" }, { "author": { "url": "member/sNullp", "name": "sNullp", "avatar": "https://cdn.v2ex.com/avatar/52c5/1893/1637_large.png?m=1705897763" }, "url": "t/607785", "title": "\u8282\u70b9\u540d\u662f\u4e0d\u662f\u5e94\u8be5\u6539\u6210 GCP \u4e86\uff1f", "id": "t/607785", "date_published": "2019-10-10T03:07:31+00:00", "content_html": "GAE \u73b0\u5728\u662f GCP \u7684\u5b50\u670d\u52a1\u4e86" }, { "author": { "url": "member/gyuuuuuu", "name": "gyuuuuuu", "avatar": "https://cdn.v2ex.com/gravatar/fad39735c6ab5c5b846040205e659a59?s=73&d=retro" }, "url": "t/560163", "title": "Google Calendar \u5f00\u53d1", "id": "t/560163", "date_published": "2019-04-30T08:26:30+00:00", "content_html": "

\u53ef\u4ee5\u901a\u8fc7 Google Apps Script \u7f16\u5199 add-on \u8fdb\u884c Calendar \u9875\u9762\u7684\u5f00\u53d1\u4e48\uff0c\u6bd4\u5982\u52a0\u4e00\u4e9b\u5b57\u6bb5\u4e4b\u7c7b\u7684

\n" }, { "author": { "url": "member/xihua2018", "name": "xihua2018", "avatar": "https://cdn.v2ex.com/avatar/28ed/b6b6/362832_large.png?m=1545207520" }, "url": "t/525065", "title": "1 \u6708 19 \u65e5\u6df1\u5733\u6d3b\u52a8\u9884\u544a \u5982\u4f55\u5229\u7528 Google Analytics \u642d\u5efa (Google )\u6700\u4e2a\u6027\u5316\u8f6c\u5316\u6f0f\u6597", "id": "t/525065", "date_published": "2019-01-08T08:47:16+00:00", "content_html": "

\u4ec0\u4e48\u662f Google Analytics?

\n
Google Analytics(Google \u5206\u6790)\u662f Google \u7684\u4e00\u6b3e\u514d\u8d39\u7684\u7f51\u7ad9\u5206\u6790\u670d\u52a1\uff0cGoogle Analytics \u529f\u80fd\u975e\u5e38\u5f3a\u5927\uff0c\u53ea\u8981\u5728\u7f51\u7ad9\u7684\u9875\u9762\u4e0a\u52a0\u5165\u4e00\u6bb5\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u63d0\u4f9b\u4e30\u5bcc\u8be6\u5c3d\u7684\u56fe\u8868 \u5f0f\u62a5\u544a\u3002\u5e76\u4e14\u663e\u793a\u4eba\u4eec\u5982\u4f55\u627e\u5230\u548c\u6d4f\u89c8\u76f8\u5173\u7f51\u7ad9\u4ee5\u53ca\u5982\u4f55\u6539\u5584\u8bbf\u95ee\u8005\u7684\u4f53\u9a8c\u3002\u63d0\u9ad8\u7f51\u7ad9\u6295 \u8d44\u56de\u62a5\u7387\u3001\u589e\u52a0\u8f6c\u6362\uff0c\u5728\u7f51\u4e0a\u83b7\u53d6\u66f4\u591a\u6536\u76ca\u3002\u53ef\u5bf9\u6574\u4e2a\u7f51\u7ad9\u7684\u8bbf\u95ee\u8005\u8fdb\u884c\u8ddf\u8e2a\uff0c\u5e76\u80fd\u6301\u7eed \u8ddf\u8e2a\u8425\u9500\u5e7f\u544a\u7cfb\u5217\u7684\u6548\u679c\uff0c\u5229\u7528\u6b64\u4fe1\u606f\u5c06\u4e86\u89e3\u5230\u54ea\u4e9b\u5173\u952e\u5b57\u771f\u6b63\u8d77\u4f5c\u7528\u3001\u54ea\u4e9b\u5e7f\u544a\u8bcd\u6700\u6709 \u6548\uff0c\u8bbf\u95ee\u8005\u5728\u8f6c\u6362\u8fc7\u7a0b\u4e2d\u4ece\u4f55\u5904\u9000\u51fa\u3002\u81ea\u4ece\u5176\u8bde\u751f\u4ee5\u6765\uff0c\u5373\u5e7f\u53d7\u597d\u8bc4\u3002\n
\n

\u6c99\u9f99\u4e3b\u9898:\u5982\u4f55\u5229\u7528 Google Analytics \u642d\u5efa (Google )\u6700\u4e2a\u6027\u5316\u8f6c\u5316\u6f0f\u6597

\n

\u6d3b\u52a8\u65f6\u95f4:1 \u6708 19 \u65e5 14:15-17:00

\n

\u6d3b\u52a8\u5730\u70b9: \u6df1\u5733\u5e02\u5357\u5c71\u533a\u4e2d\u56fd\u5730\u8d28\u5927\u5b66\u4ea7\u5b66\u7814\u57fa\u5730 2 \u697c A208 \u79d1\u6280\u5bfa

\n

\u5982\u679c\u4f60\u6ee1\u8db3\u4ee5\u4e0b\u5176\u4e2d\u4e4b\u4e00\u7684\u6761\u4ef6\uff0c\u6b22\u8fce\u4f60\u53c2\u52a0:

\n
    \n
  1. \n

    \u60f3\u5229\u7528\u5de5\u5177\u63d0\u5347\u7f51\u7ad9\u8f6c\u5316\u6548\u7387\u7684\u540c\u5b66;

    \n
  2. \n
  3. \n

    \u5bf9 Google Analytics \u5de5\u5177\u611f\u5174\u8da3\u6216\u60f3\u8fdb\u9636\u5b66\u4e60\u7684\u540c\u5b66;

    \n
  4. \n
  5. \n

    \u60f3\u8981\u4e86\u89e3 Aftership \u7684\u540c\u5b66;

    \n
  6. \n
\n

\u6ce8:

\n

1.\u73b0\u573a\u5c06\u8fdb\u884c Coding \u6559\u5b66\uff0c\u6709\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u8bb0\u5f97\u5e26\u4e0a\u4e2a\u4eba\u7535\u8111\uff0c\u53c2\u4e0e Coding \u73af\u8282\u5c06\u6709\u673a\u4f1a\u83b7\u5f97\u4e3b\u529e\u65b9\u51c6\u5907\u7cbe\u7f8e\u5956\u54c1;

\n

2.\u73b0\u573a\u5c06\u63d0\u4f9b\u7a33\u5b9a\u7684\u7f51\u7edc\u73af\u5883\u4f9b\u7528\u6237\u4f53\u9a8c;

\n

\u6d3b\u52a8\u6d41\u7a0b:

\n

14:00-14:15 \u7b7e\u5230\n14:15-14:30 \u4e3b\u6301\u4eba\u5f00\u573a\n14:30-15:00 Fifty-five (\u667a\u535a)share GA and GTM features 15:00-15:30 AfterShip share our use case\n15:30-15:45 Tea Break\n15:45-16:30 Live coding and demo\n16:30-17:00 Demo \u70b9\u8bc4\u53ca\u9881\u5956\u73af\u8282\n17:00-17:00 \u81ea\u7531\u4ea4\u6d41\u65f6\u95f4

\n

\u5177\u4f53\u7684\u51fa\u6765\u4e86\u540e\u5c06\u5728\u6d3b\u52a8\u884c\u4e0a\u8fdb\u884c\u53d1\u5e03\u3002\u6b22\u8fce\u5404\u4f4d\u62a5\u540d\u53c2\u52a0\uff01

\n" }, { "author": { "url": "member/bertsir", "name": "bertsir", "avatar": "https://cdn.v2ex.com/gravatar/19c251880a4d6ff850a807cfca1e64a7?s=73&d=retro" }, "url": "t/523357", "title": "\u8c37\u6b4c\u4e91 GCP \u8fd8\u662f\u9001 300 \u5200\u4e48\uff1f", "id": "t/523357", "date_published": "2019-01-03T02:17:14+00:00", "content_html": "

\u4e3a\u5565\u6211\u7684\u521a\u5f04\u597d\u9001\u4e86 $2,350.13 \u4e00\u8138\u61f5\u903c

\n" }, { "author": { "url": "member/mrjia", "name": "mrjia", "avatar": "https://cdn.v2ex.com/avatar/c7f8/a81f/117021_large.png?m=1534834152" }, "url": "t/515002", "title": "Google cloud \u5916\u7f51 IP \u95ee\u9898", "id": "t/515002", "date_published": "2018-12-06T08:05:19+00:00", "content_html": "\u65e0\u8bba\u628a\u8282\u70b9\u9009\u62e9\u5728\u53f0\u6e7e\u8fd8\u662f\u65e5\u672c\u8fd8\u662f\u65b0\u52a0\u5761\uff0c\u7ed9\u5b9a\u7684\u9759\u6001 IP \u90fd\u662f\u7f8e\u56fd IP\u3002
Google cloud \u4e0d\u80fd\u628a\u5916\u7f51 IP \u8bbe\u7f6e\u5230\u53f0\u6e7e \u4e1c\u4eac\u6216\u8005\u65b0\u52a0\u5761\u4e48\uff1f
\u6211\u5982\u679c\u60f3\u7528\u8fd9\u4e09\u4e2a\u4f4d\u7f6e\u7684 IP\uff0c\u54ea\u5bb6 VPS \u670d\u52a1\u4e0a\u53ef\u4ee5\u641e\u5462\uff1f
\u4ee5\u4e0a\uff0c\u8c22\u8c22" }, { "author": { "url": "member/apples398", "name": "apples398", "avatar": "https://cdn.v2ex.com/gravatar/25d90de96b039fb61da3f35a480d4362?s=73&d=retro" }, "url": "t/505948", "title": "google \u8d26\u53f7\u627e\u56de\uff01", "id": "t/505948", "date_published": "2018-11-08T17:02:21+00:00", "content_html": "\u6700\u8fd1 google \u8d26\u53f7\u5bc6\u7801\u5fd8\u8bb0\u4e86\uff0c\u65e0\u6cd5\u627e\u56de\u3002\u8f93\u5165\u624b\u673a\u9a8c\u8bc1\u7801\u540e\uff0c\u8f93\u5165\u4e86\u7559\u7684\u90ae\u7bb1\u3002163 \u90ae\u7bb1\u7ed1\u5b9a\u5230\u522b\u7684 google \u8d26\u53f7\uff0c\u4e0d\u77e5\u662f\u5426\u8fd9\u4e2a\u539f\u56e0\u5bfc\u81f4\u65e0\u6cd5\u6536\u5230\u9a8c\u8bc1\u7801\u3002\u6700\u540e\uff0c\u63d0\u4f9b\u90ae\u7bb1\u3002\u6309\u7167\u63d0\u793a\u8f93\u5165\u9a8c\u8bc1\u7801\u3002google \u7ed9\u7684\u63d0\u793a\u662f Google \u65e0\u6cd5\u9a8c\u8bc1\u6b64\u5e10\u53f7\u5f52\u60a8\u6240\u6709\u3002
\u662f\u5426\u6709\u529e\u6cd5\u627e\u56de\uff1f" }, { "author": { "url": "member/JCZ2MkKb5S8ZX9pq", "name": "JCZ2MkKb5S8ZX9pq", "avatar": "https://cdn.v2ex.com/avatar/6170/eb02/318343_large.png?m=1685851035" }, "url": "t/482632", "title": "Google \u6587\u672c\u8f6c\u8bed\u97f3\u7684\u8f6e\u5b50 \u8c01\u641e\u8fc7\uff1f", "id": "t/482632", "date_published": "2018-08-23T11:23:55+00:00", "content_html": "

\u9700\u6c42

\n

\u662f\u4e3a\u4e86\u505a\u89c6\u9891\u914d\u97f3\u3002\u7136\u540e\u4e00\u53e5\u53e5\u53bb\u4e0b\u8f7d\u5f88\u9ebb\u70e6\u561b\uff0c\u5c31\u60f3\u641e\u4e2a\u8f6e\u5b50\u3002
\n\u81ea\u52a8\u8bc6\u522b\u591a\u884c\u6587\u672c\uff0c\u6216\u8005 excel\uff0c\u7136\u540e\u6bcf\u6bb5\u843d\u5355\u72ec\u4e0b\u8f7d\u4e3a mp3\uff0c\u8fd9\u6837\u6bd4\u8f83\u65b9\u4fbf\u3002

\n

\u65b9\u6cd5

\n

\u76ee\u524d\u662f\u76f4\u63a5\u53bb\u6478\u4e86 gcloud \u5b98\u65b9\u7684 api \u5566\uff0c\u4f20\u9001\u95e8\uff1a
\nQuickstart: Using the Client Libraries \u00a0|\u00a0 Cloud Text-to-Speech API \u00a0|\u00a0 Google Cloud

\n

\u95ee\u9898

\n

\u73b0\u5728\u5168\u5c40\u5f00\u7740\u98de\u673a\uff0c\u4f46\u8dd1 sample.py \u8fd8\u662f\u4f1a 504 \u8d85\u65f6\u3002\uff08\u8bbf\u95ee google \u6216 youtube \u6216 g trans \u90fd ok \u7684\uff09
\n\u60f3\u8bf7\u95ee\u6709\u6ca1\u6709\u4eba\u7528\u8fc7 google \u8fd9\u4e2a\u63a5\u53e3\uff1f

\n

\u6216\u8005\u6709\u5176\u5b83\u8f6e\u5b50\u4e5f\u53ef\u4ee5\u63a8\u8350\u4e00\u4e0b

\n" }, { "author": { "url": "member/bluesjm", "name": "bluesjm", "avatar": "https://cdn.v2ex.com/gravatar/e2fbd0b915be010b803a780877016b11?s=73&d=retro" }, "url": "t/468731", "date_modified": "2018-07-15T19:18:30+00:00", "content_html": "

\u8bf7\u6307\u6559

\n", "date_published": "2018-07-06T10:03:29+00:00", "title": "V2EX \u6e90\u7801\u5fc5\u987b\u7528 Google APP Engine \u5417\uff0c\u6211\u4e0b\u4e86\u6e90\u7801\u60f3\u7528\u6237\u81ea\u5df1\u5c0f\u533a\u5185\u5e73\u53f0\u4e0a\uff0c\u600e\u4e48\u80fd\u624b\u673a\u8bbf\u95ee\uff1f", "id": "t/468731" }, { "author": { "url": "member/CSGO", "name": "CSGO", "avatar": "https://cdn.v2ex.com/avatar/ef71/2edc/315449_large.png?m=1757663072" }, "url": "t/460593", "title": "\u8c01\u6709 Google Play \u5f00\u53d1\u8005\u5e10\u53f7\u8fdd\u89c4\u7684\u7ecf\u9a8c\uff1f", "id": "t/460593", "date_published": "2018-06-05T07:45:17+00:00", "content_html": "\u6536\u5230\u6709\u8fd9\u6837\u7684\u4e00\u5c01\u90ae\u4ef6\uff1a\r
----------------------------------------------------------------------------------------------------------------------------------\r
\u6211\u4eec\u53d1\u9001\u6b64\u7535\u5b50\u90ae\u4ef6\u662f\u4e3a\u4e86\u901a\u77e5\u60a8\uff0c\u60a8\u7684 Google Play \u53d1\u5e03\u5546\u5e10\u53f7\u5df2\u88ab\u7ec8\u6b62\u3002\r
\r
\u7ec8\u6b62\u539f\u56e0\uff1a\u8fdd\u53cd\u4e86\u5f00\u53d1\u8005\u8ba1\u5212\u653f\u7b56\u4e2d\u7684\u5047\u5192\u884c\u4e3a\u653f\u7b56\u3002\r
\r
Google Play \u53d1\u5e03\u5546\u5e10\u53f7\u88ab\u7ec8\u6b62\u4e0e\u5f00\u53d1\u8005\u7684\u884c\u4e3a\u6709\u5173\uff0c\u800c\u4e14\u53ef\u80fd\u8fd8\u4f1a\u5f71\u54cd\u591a\u4e2a\u5e10\u53f7\u6ce8\u518c\u548c\u76f8\u5173\u7684 Google \u670d\u52a1\u3002\r
\r
\u60a8\u53ef\u4ee5\u8bbf\u95ee\u5f00\u53d1\u8005\u653f\u7b56\u4e2d\u5fc3\uff0c\u4ee5\u66f4\u597d\u5730\u4e86\u89e3\u6211\u4eec\u5982\u4f55\u8d2f\u5f7b\u5b9e\u65bd\u5f00\u53d1\u8005\u8ba1\u5212\u653f\u7b56\u3002\u5982\u679c\u60a8\u5df2\u9605\u8bfb\u76f8\u5173\u653f\u7b56\uff0c\u5e76\u8ba4\u4e3a\u6b64\u7ec8\u6b62\u51b3\u5b9a\u53ef\u80fd\u6709\u8bef\uff0c\u8bf7\u4e0e\u6211\u4eec\u7684\u653f\u7b56\u652f\u6301\u56e2\u961f\u8054\u7cfb\u3002\r
\r
\u8bf7\u52ff\u5c1d\u8bd5\u6ce8\u518c\u65b0\u7684\u5f00\u53d1\u8005\u5e10\u53f7\u3002\u6211\u4eec\u76ee\u524d\u4e0d\u4f1a\u6062\u590d\u60a8\u7684\u5e10\u53f7\u3002\r
\r
\u6b64\u81f4\r
\r
Google Play \u56e2\u961f\u656c\u4e0a\r
\r
This is a notification that your Google Play Publisher account has been terminated.\r
\r
REASON FOR TERMINATION: Violation of the Impersonation policy within the Developer Program Policies.\r
\r
Google Play Publisher terminations are associated with developers, and may span multiple account registrations and related Google services.\r
\r
You can visit the Developer Policy Center to better understand how we enforce Developer Program Policies. If you \u2019 ve reviewed the policy and feel this termination may have been in error, please reach out to our policy support team.\r
\r
Please do not attempt to register a new developer account. We will not be restoring your account at this time.\r
\r
The Google Play Team\r
\r
----------------------------------------------------------------------------------------------------------------------------------\r
\r
\u539f\u56e0\u5c31\u662f\u6211\u4f5c\u6b7b\uff0c\u628a\u5f00\u53d1\u8005\u540d\u79f0\u6539\u4e3a\uff1aGoogle Design\uff0c\u5bfc\u81f4\u8fdd\u89c4\uff0c\u90a3\u4e48\u8fd8\u6709\u5e0c\u671b\u89e3\u5c01\u5417\uff1f" }, { "author": { "url": "member/littlecat", "name": "littlecat", "avatar": "https://cdn.v2ex.com/gravatar/96a9c47e7cedebde3c3a6a735f77e668?s=73&d=retro" }, "url": "t/457054", "title": "[\u8bf7\u6559] \u4e0a\u4f20\u5e94\u8be5\u5230 google play\uff0c\u72b6\u6001\u4e3a\u53d1\u5e03\u6210\u529f\uff0c\u4f46\u662f\u8bbe\u5907\u76ee\u5f55\u4e00\u7247\u7070\uff0c\u65e0\u6cd5\u4e0b\u8f7d", "id": "t/457054", "date_published": "2018-05-23T02:22:50+00:00", "content_html": "

\u516c\u53f8\u6709\u4e2a\u9879\u76ee\uff0c\u7528 react-native \u5199\u7684\uff0c\u53d1\u5e03\u5230 google play \u5546\u57ce\uff0c\u4f46\u662f\u53d1\u5e03\u6210\u529f\u540e\uff0c\u53ea\u80fd\u5728\u7f51\u9875\u7aef\u7684 google play \u5546\u57ce\u641c\u7d22\u5230\u8be5\u5e94\u7528\uff0c\u5728\u624b\u673a\u7aef\u7684 play \u5546\u57ce\u641c\u7d22\u4e0d\u5230\uff0c\u6700\u56f0\u6270\u7684\u95ee\u9898\u5c31\u662f\u5373\u4f7f\u641c\u7d22\u5230\u4e86\u4e5f\u65e0\u6cd5\u4e0b\u8f7d\uff0c\u63d0\u793a\u201c\u6b64\u5e94\u7528\u4e0e\u60a8\u7684\u8bbe\u5907\u4e0d\u517c\u5bb9\u201d\u3002\n\u53d1\u5e03\u8be5\u4e3b\u9898\u524d\uff0c\u5df2\u7ecf\u770b\u8fc7\u5b98\u65b9\u5e2e\u52a9\u6587\u6863\uff0c\u4e5f\u627e\u8fc7\u5404\u81ea\u65b9\u6cd5\u8bd5\u9a8c\uff0c\u4e5f\u4fee\u6539\u4e86\u597d\u51e0\u4e2a\u7248\u672c\uff0c\u90fd\u4e0d\u884c\u3002\n\u8bd5\u9a8c\u4e00\uff1a\u56fd\u5185\u7528\u6237\u5373\u4f7f\u7ffb\u5899\u6d4f\u89c8\u7f51\u9875\u7248 google play \u548c\u56fd\u5916\u7528\u6237\u770b\u5230\u7684\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u8bf7\u56fd\u5916\u7528\u6237\u8bd5\u7740\u4e0b\u8f7d\uff0c\u540c\u6837\u63d0\u793a\u201c\u6b64\u5e94\u7528\u4e0e\u60a8\u7684\u8bbe\u5907\u4e0d\u517c\u5bb9\u201d\uff0c\u65e0\u6cd5\u4e0b\u8f7d\uff1b\n\u8bd5\u9a8c\u4e8c\uff1a\u53c2\u8003\u6587\u7ae0 http://www.it1352.com/141729.html\uff0c\u6ca1\u6709\u770b\u61c2\u8be5\u6587\u7ae0\n\u8bd5\u9a8c\u4e09\uff1a\u53c2\u8003\u6587\u7ae0 http://oyangwin.blogspot.nl/2015/10/google-playappgoogle-play.html\uff0c\u6839\u636e\u6587\u7ae0\u7684\u63cf\u8ff0\u8fdb\u884c\u4fee\u6539\uff0c\u4e0a\u4f20\u540e\u8fd8\u662f\u6ca1\u6709\u7528\n\u2026\u2026\n\u8fd8\u770b\u4e86\u5f88\u591a\u6587\u7ae0\uff0c\u4e5f\u8bd5\u8fc7\u5f88\u591a\u65b9\u6cd5\uff0c\u4ecd\u7136\u65e0\u6cd5\u89e3\u51b3\uff0c\u5e0c\u671b\u6709\u4eba\u80fd\u5e2e\u5fd9\u89e3\u7b54\u4e00\u4e0b\uff0c\u8c22\u8c22\uff01

\n" }, { "author": { "url": "member/YMB", "name": "YMB", "avatar": "https://cdn.v2ex.com/avatar/8ed3/822b/208953_large.png?m=1496507415" }, "url": "t/443129", "title": "\u4f60\u4eec\u670d\u52a1\u5668\u90fd\u662f\u9009\u7684\u54ea\u4e2a\u5730\u533a\uff0c\u901f\u5ea6\u5982\u4f55\uff1f", "id": "t/443129", "date_published": "2018-03-31T06:41:03+00:00", "content_html": "\u65e5\u5e38\u5ef6\u8fdf 300+" }, { "author": { "url": "member/vision4fun", "name": "vision4fun", "avatar": "https://cdn.v2ex.com/avatar/983c/d81e/57156_large.png?m=1665150391" }, "url": "t/434389", "title": "GAE \u9aa8\u7070\u5b9e\u4f8b\u662f\u4e0d\u662f\u5df2\u7ecf\u51c9\u900f\u4e86", "id": "t/434389", "date_published": "2018-03-02T13:19:21+00:00", "content_html": "\u53bb\u5356\u4e86\u51e0\u5e74\u8eab\u56de\u5230\u73b0\u5b9e\u53d1\u73b0 GAE \u5df2\u7ecf\u4e0d\u80fd\u8bbf\u95ee\u4e86\uff0c\u7ffb\u4e86\u7ffb\u4e09\u5e74\u524d\uff08 2015/3 \uff09\u6709\u90ae\u4ef6\uff1a\r
\u300e Important notice for Master/Slave Datastore app owners on Google App Engine \u300f\r
"This means that after August 10, 2015 these applications will stop servicing requests and you will no longer have programmatic access to your data. If you no longer need your Master/Slave applications and associated data, no action is required. However, if you do need any of these applications we encourage you to migrate them to HRD immediately. "\r
\r
\u8fd9\u662f\u4e0d\u662f\u5df2\u7ecf\u51c9\u900f\u4e86\uff1f" }, { "author": { "url": "member/rrrrroyyyyy", "name": "rrrrroyyyyy", "avatar": "https://cdn.v2ex.com/avatar/7f9f/e601/243867_large.png?m=1656421112" }, "url": "t/430686", "title": "\u4f60\u4eec\u6709\u6ca1\u6709\u6536\u5230\u8fc7\u8fd9\u6837\u7684\u90ae\u4ef6\uff1f", "id": "t/430686", "date_published": "2018-02-14T02:44:56+00:00", "content_html": "

\u6211\u662f\u9886\u4e86 Google Cloud \u7684 300 \u7f8e\u5143\u4f7f\u7528\u91d1\uff0c\u4eca\u65e9\u6536\u5230\u8fd9\u6837\u7684\u90ae\u4ef6\u2193\n\"IMG_7608.PNG\"

\n
Hi xxx,\n\nMy name is Sarah and I \u2019 d like to personally connect with you about maximizing your trial and to understand any customer feedback you might have to share.\n \nI can also help connect you and your team with support or our developer communities if needed.\n \nIf you're open to it, let me know a quick time to chat later this week or next, or you can book some time on my calendar directly here.\n\nThanks,\n\nSarah Barbour | Cloud Sales & Customer Growth | sbarbour@google.com | 404-400-8203 \n\"Google Cloud, changing how people compute, not just where\" \n
\n

\u5404\u4f4d\u80fd\u5e2e\u6211\u89e3\u91ca\u4e00\u4e0b\u5417\uff1f
\n\u514d\u8d39\u589e\u503c\uff1f\u8981\u5199\u53cd\u9988\uff1f

\n" }, { "author": { "url": "member/baqianniao", "name": "baqianniao", "avatar": "https://cdn.v2ex.com/gravatar/4b442db45f6f1f4406ac3af5f3a6f9e4?s=73&d=retro" }, "url": "t/428156", "title": "GAE \u90e8\u7f72\u51fa\u9519\uff08\u6c42\u52a9\uff01\uff09", "id": "t/428156", "date_published": "2018-02-03T02:20:49+00:00", "content_html": "\u7528\u7684 python sdk2.7.14,\u547d\u4ee4\u884c appcfg.py --noauth_local_webserver --oauth2 --skip_sdk_update_check --no_cookies update F:\\yy\\shanghai-193908 \u4e0a\u4f20\u65f6\u9047\u5230 httplib.ResponseNotReady\uff0c\u8bf7\u95ee\u662f\u4ec0\u4e48\u539f\u56e0\uff0c\u6211\u7528\u7684\u514d\u8d39\u7684 VPN\uff0c\u662f\u56e0\u4e3a\u7f51\u901f\u5dee\u5417\uff1f" }, { "author": { "url": "member/will1916", "name": "will1916", "avatar": "https://cdn.v2ex.com/avatar/1c63/317e/239288_large.png?m=1512022019" }, "url": "t/410808", "title": "\u8c37\u6b4c cdn\uff0c google cloud cdn \u8bbe\u7f6e https \u7684\u8bbf\u95ee\u8bf7\u6c42\u3002", "id": "t/410808", "date_published": "2017-11-30T05:56:16+00:00", "content_html": "

\u524d\u6bb5\u65f6\u95f4\u60f3\u641e\u4e0b\u8c37\u6b4c\u7684 cdn\uff0c\u7136\u540e\u67e5\u8d44\u6599\u770b\u5230\u4e86 t/272406 \u8fd9\u4e2a\u5e16\u5b50\u4e0b \u4e00\u697c\u7684\u56de\u590d\uff0c @sumhat \u4ed6\u7684\u7ad9\u7528\u7684\u5c31\u662f google cloud cdn \u901f\u5ea6\u975e\u5e38\u597d\u3002\u8fd9\u4e24\u5929\u6211\u81ea\u5df1\u5c1d\u8bd5\u914d\u7f6e\u4e86\u4e00\u4e0b\uff0c\u603b\u662f\u4e0d\u80fd\u6210\u529f\u5c06\u6d41\u91cf\u5f15\u5230 https \u4e0a\u3002\n\u6211\u7684\u6e90\u7ad9\u5728\u9999\u6e2f\uff0c\u6211\u5728\u8c37\u6b4c\u53f0\u6e7e\u5730\u533a\u4e70\u4e86\u4e00\u53f0 GCE \u505a Nginx \u53cd\u5411\u4ee3\u7406\u56de\u6211\u7684\u6e90\u7ad9\uff0c\u6bd4\u5982\u8fd9\u53f0 GCE \u7684 NGINX \u7684 ip \u662f 1.1.1.1 Nginx \u914d\u7f6e\u662f 123.xyz \u548c www.123.xyz \u90fd\u8f6c\u8df3\u5230 https://www.123.xyz \u3002\u76f4\u63a5\u7528\u57df\u540d\u89e3\u6790\u5230\u8fd9\u53f0 GCE \u7684 Nginx \u4e0a\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u6d4f\u89c8\u5668\u8f93\u5165 123.xyz \u6216\u8005 www.123xyz.com \u90fd\u80fd\u6b63\u786e\u8f6c\u5230 https \u4e0a\u3002\u7136\u540e\u6211\u7528\u8c37\u6b4c\u7684\u8d1f\u8f7d\u5747\u8861\u5668\u5efa\u7acb\u4e86 cdn \u540e\uff0c\u53ea\u80fd\u8f93\u5165 https://www.123.xyz \u624d\u80fd\u8bbf\u95ee\u6211\u7684\u7f51\u7ad9\uff0c\u8f93\u5165 123.xyz \u6216\u8005 www.123xyz.com \u90fd\u662f\u53d8\u6210 http://123.xyz \u6216\u8005 http://www.123.xyz \u3002\u90fd\u65e0\u6cd5\u8f6c\u8df3\u5230 https \u4e0a\u3002\n\u8bf7\u95ee\u662f\u5426\u80fd\u6709\u8bbe\u7f6e\u8fc7\u7684\u54e5\u4eec\u6307\u70b9\u4e00\u4e0b\u3002

\n
\u540e\u7aef\u670d\u52a1\n
\n

\u540e\u7aef\u670d\u52a1

\n
    \n
  1. instance-2
  2. \n
\n

\u7aef\u70b9\u534f\u8bae\uff1aHTTPS \u5df2\u547d\u540d\u7684\u7aef\u53e3\uff1a https \u8d85\u65f6\uff1a30 \u79d2 \u8fd0\u884c\u72b6\u51b5\u68c0\u67e5\uff1a https-kk \u4f1a\u8bdd\u7c98\u6027\uff1a\u65e0 Cloud CDN\uff1a\u5df2\u505c\u7528

\n

\u9ad8\u7ea7\u914d\u7f6e\n\u5b9e\u4f8b\u7ec4\t\u5730\u533a\t\u8fd0\u884c\u72b6\u51b5\u826f\u597d\t\u81ea\u52a8\u8c03\u8282\t\u5e73\u8861\u6a21\u5f0f\t\u5bb9\u91cf\ninstance-group-1\tasia-east1-b\t1 / 1\t\u5173\u95ed\tCPU \u5229\u7528\u7387\u4e0a\u9650\uff1a80%\t100%\n\u4e3b\u673a\u548c\u8def\u5f84\u89c4\u5219

\n

\u4e3b\u673a\t\u8def\u5f84\t\u540e\u7aef\n\u6240\u6709\u4e0d\u5339\u914d\u7684\u9879\uff08\u9ed8\u8ba4\uff09\t\u6240\u6709\u4e0d\u5339\u914d\u7684\u9879\uff08\u9ed8\u8ba4\uff09\tinstance-2\n\u524d\u7aef

\n

\u534f\u8bae\t IP:\u7aef\u53e3\t \u8bc1\u4e66\nHTTP\t135.10.167.69:80\t\u2014\nHTTPS\t135.10.167.69:443\tjs-ca1

\n" }, { "author": { "url": "member/zander", "name": "zander", "avatar": "https://cdn.v2ex.com/avatar/0972/350b/31008_large.png?m=1778580118" }, "url": "t/399055", "title": "Google Cloud Platform \u81ea\u5b9a\u4e49\u9632\u706b\u5899\u65e0\u6548\uff0c\u53ea\u6709 443\uff0c 80\uff0c 22 \u7b49\u51e0\u4e2a\u7aef\u53e3\u80fd\u7528\u3002", "id": "t/399055", "date_published": "2017-10-19T12:57:58+00:00", "content_html": "

\u597d\u50cf\u662f\u6700\u8fd1\u51fa\u73b0\u7684\u4e8b\uff0c\u5404\u4f4d\u6709\u4ec0\u4e48\u5934\u7eea\u5417\uff1f

\n" }, { "author": { "url": "member/yegle", "name": "yegle", "avatar": "https://cdn.v2ex.com/avatar/2823/f479/756_large.png?m=1577898727" }, "url": "t/371809", "title": "Google App Engine Standard \u589e\u52a0 Java 8 beta \u652f\u6301", "id": "t/371809", "date_published": "2017-06-28T16:43:41+00:00", "content_html": "

https://cloud.google.com/appengine/docs/standard/java/runtime-java8

\n\n

Java8 \u53ea\u662f\u5f00\u59cb:-)

\n" }, { "author": { "url": "member/Ettup", "name": "Ettup", "avatar": "https://cdn.v2ex.com/gravatar/89f727d77601d277bdb6ac879cea7740?s=73&d=retro" }, "url": "t/371546", "title": "\u6709\u4eba\u7684 G Suite \u5730\u533a\u8bbe\u7f6e\u5728\u53f0\u6e7e\u7684\u5417\uff1f\u8bf7\u6559\u4e2a\u95ee\u9898", "id": "t/371546", "date_published": "2017-06-27T16:30:11+00:00", "content_html": "\u5f53\u521d\u7533\u8bf7 G Suite \u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u65e0\u6cd5\u9009\u62e9\u5927\u9646\u5927\u533a\uff0c\u54a8\u8be2\u4e86 Google \u7684\u5ba2\u670d\uff0c\u628a\u5730\u533a\u8bbe\u5728\u4e86\u53f0\u6e7e\uff0c\u57fa\u7840\u5957\u9910 $5/\u6708\u3002\u8fd9\u4e24\u5929 Google \u53d1\u6765\u901a\u77e5\uff0c\u7531\u4e8e\u53f0\u6e7e\u7a0e\u5236\uff0c\u9700\u8981\u589e\u52a0\u53f0\u6e7e\u7684\u589e\u503c\u7a0e\u53f7\u7801\uff0c\u4e0d\u7136\u76f4\u63a5\u6bcf\u6708\u591a\u6263 5% \u7684\u7a0e\u8d39\uff0c\u6709\u78b0\u5230\u8fd9\u4e2a\u95ee\u9898\u7684\u5417\uff1f\u6709\u6ca1\u6709\u89e3\u51b3\u65b9\u6cd5\uff1f" }, { "author": { "url": "member/hanqi7012", "name": "hanqi7012", "avatar": "https://cdn.v2ex.com/avatar/e600/801a/76037_large.png?m=1506143265" }, "url": "t/347195", "title": "Google cloud \u5916\u7f51 ip \u95ee\u9898", "id": "t/347195", "date_published": "2017-03-13T13:30:21+00:00", "content_html": "

\u95ee\u4e2a\u95ee\u9898\u554a\u2026\u2026

\n

\u6211\u5f04\u4e86\u4e2a GCE

\n

asia-northeast1-a\t\u548c asia-east1-a

\n

\u65e5\u672c\u7684 ping \u5728 100 \u5de6\u53f3 \u53f0\u6e7e\u5728 60 \u5de6\u53f3\uff08\u5317\u65b9\u8054\u901a\uff09

\n

\u624b\u8d31\u628a asia-northeast1-a \u5220\u4e86\u91cd\u65b0\u5efa\u4e86\u4e00\u4e2a\u60b2\u5267\u53d1\u751f\u4e86

\n

\u7b2c\u4e00\u6b21\u5206\u914d\u7684 ip \u662f 104 \u5f00\u5934\u7684 \u5ef6\u8fdf 100 \u5de6\u53f3\u2026\u2026

\n

\u7b2c\u4e8c\u6b21\u5206\u914d\u7684\u5c31\u662f 3x \u5f00\u5934\u7684 ip \u4e86\u2026\u2026\u5ef6\u8fdf\u76f4\u63a5 200+

\n

\u91cd\u8bd5\u4e86\u597d\u591a\u6b21\u90fd\u662f\u8fd9\u6837\u4e86\u2026\u2026\u770b\u4e86\u4e0b\u7ed5\u8def\u7f8e\u56fd\u4e86\u2026\u2026\u600e\u4e48\u7834

\n" }, { "author": { "url": "member/Yourdaye", "name": "Yourdaye", "avatar": "https://cdn.v2ex.com/gravatar/e9662033933f9bb61376a2c074d8ab13?s=73&d=retro" }, "url": "t/343740", "title": "Google Cloud \u662f\u4e0d\u662f\u88ab\u5f3a\u4e86\uff1f\u4e00\u5927\u65e9\u7684\u8fde\u4e0d\u4e0a", "id": "t/343740", "date_published": "2017-02-28T02:49:27+00:00", "content_html": "

ping \u4e86\u4e00\u4e0b\uff0c\u5168\u90e8\u8d85\u65f6

\n" }, { "author": { "url": "member/eabet", "name": "eabet", "avatar": "https://cdn.v2ex.com/gravatar/86711a65789fc2eccc9ac93ffa877207?s=73&d=retro" }, "url": "t/331336", "title": "GOOGLE COLUD \u7528 HTTP \u8d1f\u8f7d\u5747\u8861\u7684 CDN SESSION \u4e22\u5931\u95ee\u9898", "id": "t/331336", "date_published": "2016-12-30T12:50:02+00:00", "content_html": "

\u7528 google cloud CDN \u7684\u65f6\u5019\u4f1a\u5bfc\u81f4\u7f51\u7ad9\u4f1a\u5458\u4e0d\u80fd\u767b\u5f55\uff0c \u767b\u5f55\u540e\u53f0\u79d2\u9000\uff0c \u6709\u6ca1\u6709\u4eba\u9047\u5230\u8fc7\uff1f

\n" }, { "author": { "url": "member/nethub", "name": "nethub", "avatar": "https://cdn.v2ex.com/gravatar/bc72e83d5e034eeb6a23f70f2c8ee0e9?s=73&d=retro" }, "url": "t/322408", "title": "Google VM \u63a8\u8350\u4e0b\uff0c\u53f0\u6e7e\u8282\u70b9\u901f\u5ea6\u5f88\u597d\uff0c\u5c31\u662f\u6d41\u91cf\u5c0f\u8d35\u3002", "id": "t/322408", "date_published": "2016-11-22T08:25:05+00:00", "content_html": "\u63a8\u8350\u7406\u7531\u662f\u5bf9\u5404\u4e2a\u7f51\u7edc\u517c\u5bb9\u6027\u5f88\u597d\uff0c\u7535\u4fe1\uff0c\u8054\u901a\uff0c\u79fb\u52a8 ping \u503c\u90fd\u5728 50ms \u5de6\u53f3\u3002\u4e0b\u8f7d\u901f\u5ea6\u5728 1M \u4ee5\u4e0a\u3002\u6700\u5c0f\u5355\u4f4d\u7684\u4e3b\u673a 5 \u7f8e\u5143\u6bcf\u6708\u3002\r
\u7f3a\u70b9\u5c31\u662f\u6d41\u91cf\u5355\u8ba1\u8d39\uff0c 5G \u7684\u4e9a\u592a\u5230\u4e2d\u56fd\u6d41\u91cf 0.8 \u7f8e\u5143\u5de6\u53f3\u3002" }, { "author": { "url": "member/willsun", "name": "willsun", "avatar": "https://cdn.v2ex.com/gravatar/8bda0edaef9a391763b04964c7db2db4?s=73&d=retro" }, "url": "t/318292", "title": "\u4e3a\u4ec0\u4e48\u6709\u4eba\u53cd\u5411\u4ee3\u7406 google \u641c\u7d22\uff0c\u5374\u4e0d\u80fd\u53cd\u5411 gmail?", "id": "t/318292", "date_published": "2016-11-05T08:00:20+00:00", "content_html": "\u5982\u9898\uff0c" }, { "author": { "url": "member/mytsing520", "name": "mytsing520", "avatar": "https://cdn.v2ex.com/avatar/9402/97cc/70827_large.png?m=1751608165" }, "url": "t/309893", "title": "Google Apps \u6b63\u5f0f\u66f4\u540d\u4e3a G Suite", "id": "t/309893", "date_published": "2016-09-29T23:09:36+00:00", "content_html": "\u90ae\u4ef6\u539f\u6587\u5982\u4e0b\uff1a\r
---------------------------\r
\u5c0a\u656c\u7684 Google Apps \u5ba2\u6237\uff1a\r
\u6211\u4eec\u521b\u5efa Google Apps \u662f\u4e3a\u4e86\u5e2e\u52a9\u4e16\u754c\u5404\u5730\u7684\u4eba\u4eec\u534f\u540c\u5408\u4f5c\u3001\u5171\u540c\u521b\u65b0\uff0c\u8ba9\u60a8\u7684\u5355\u4f4d\u5feb\u901f\u8fd0\u4f5c\u3001\u53d6\u5f97\u66f4\u5927\u6210\u5c31\u3002\u73b0\u5728\uff0c\u6211\u4eec\u8981\u63a8\u51fa\u4e00\u4e2a\u66f4\u80fd\u5f70\u663e\u6b64\u4f7f\u547d\u7684\u65b0\u540d\u79f0\uff1a G Suite \u3002\r
\u60a8\u597d\uff01\u5728\u63a5\u4e0b\u6765\u7684\u51e0\u5468\u5185\uff0c\u60a8\u4f1a\u5728\u719f\u6089\u7684\u5730\u65b9\uff08\u5305\u62ec\u7ba1\u7406\u63a7\u5236\u53f0\u3001\u5e2e\u52a9\u4e2d\u5fc3\u548c\u60a8\u7684\u5e10\u5355\u4e0a\uff09\u770b\u5230\u6211\u4eec\u7684\u65b0\u540d\u79f0\u548c\u65b0\u5fbd\u6807\u3002 G Suite \u4f9d\u7136\u662f\u60a8\u65e5\u5e38\u4f7f\u7528\u7684\u591a\u5408\u4e00\u89e3\u51b3\u65b9\u6848\uff0c\u5305\u542b\u540c\u6837\u5f3a\u5927\u7684\u5de5\u5177\uff1a Gmail \u3001\u6587\u6863\u3001\u4e91\u7aef\u786c\u76d8\u548c\u65e5\u5386\u3002\r
\u611f\u8c22\u60a8\u4e00\u8def\u966a\u4f34\uff0c\u624d\u6709\u5982\u4eca\u7684 G Suite \u3002\u6211\u4eec\u4e00\u76f4\u81f4\u529b\u4e8e\u6539\u8fdb\u6280\u672f\uff0c\u8ba9 G Suite \u4e0d\u65ad\u5b8c\u5584\u5e76\u4e0e\u60a8\u7684\u56e2\u961f\u4e00\u540c\u6210\u957f\u3002\r
\u5982\u679c\u60a8\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u6b22\u8fce\u968f\u65f6\u4e0e\u6211\u4eec\u8054\u7cfb\u3002\r
\u8bf7\u8bbf\u95ee\u6211\u4eec\u7684\u5b98\u65b9\u535a\u6587\uff08\u82f1\u6587\u7248\uff09\u4ee5\u4fbf\u4e86\u89e3\u8be6\u60c5\u3002\r
\r
\u6b64\u81f4\r
G Suite \u56e2\u961f\r
---------------------------" }, { "author": { "url": "member/loongwang", "name": "loongwang", "avatar": "https://cdn.v2ex.com/avatar/e957/1c97/106355_large.png?m=1490023055" }, "url": "t/309370", "title": "\u6c5f\u82cf\u7535\u4fe1\uff0c\u5df2\u53ef\u81ea\u7531\u8bbf\u95ee gmail \u548c google now", "id": "t/309370", "date_published": "2016-09-27T12:20:11+00:00", "content_html": "\u7ecf\u8fc7\u524d\u6bb5\u65f6\u95f4\u7535\u4fe1\u7684\u95f9\u817e\uff0c\u4eca\u5929\u7a81\u7136\u53d1\u73b0\u3002\u4e0d\u77e5\u9053\u662f\u4e0d\u662f\u4e2a\u4f8b" }, { "author": { "url": "member/Contextualist", "name": "Contextualist", "avatar": "https://cdn.v2ex.com/gravatar/45e846e23126ef7386f111d8c67522c1?s=73&d=retro" }, "url": "t/286549", "title": "\u5728 GAE \u4e0a\u90e8\u7f72\u66f4\u65b0\u65f6\u6539\u52a8\u88ab\u65e0\u89c6\u4e86\u600e\u4e48\u7834\uff1f", "id": "t/286549", "date_published": "2016-06-17T12:27:56+00:00", "content_html": "\u5927\u6982\u5728\u51e0\u5929\u524d\u6211\u5c0f\u6539\u4e86\u4e00\u4e0b\u6258\u7ba1\u5728 Github \u7684\u67d0\u4e2a Google web app \u7684\u4ee3\u7801\uff0c\u4f46\u6ca1\u6709\u90e8\u7f72\u3002\u6628\u5929\u5230 GAE \u90a3\u91cc\u53bb\u90e8\u7f72\u3002\u770b\u5230\u4ece Github push \u7684 commits GAE \u90fd\u786e\u5b9e\u6536\u5230\u4e86\u3002\u7528 appcfg.py \u6765 update \u6240\u6709\u65f6\uff0c\u6211\u6ce8\u610f\u5230\u8f93\u51fa\u4fe1\u606f\u91cc scan files \u548c clone files \u7684\u65f6\u5019\u5e76\u6ca1\u6709\u5e26 upload files (\u5373\u4e0a\u4f20\u65b0\u7684\u6587\u4ef6)\u3002\u518d\u67e5\u770b\u6211\u90a3 app \u4e5f\u786e\u5b9e\u662f\u65e7\u7248\u672c\u7684\u3002\u6211\u7684\u66f4\u65b0\u600e\u4e48\u5c31\u8fd9\u4e48\u88ab\u65e0\u89c6\u4e86\uff1f" }, { "author": { "url": "member/ilikekindle", "name": "ilikekindle", "avatar": "https://cdn.v2ex.com/gravatar/7c7a7e0d3179803550e8c35ad4a9324a?s=73&d=retro" }, "url": "t/275398", "date_modified": "2016-04-30T02:16:41+00:00", "content_html": "

\u521a\u624d\u8fdb\u53bb\u770b\u770b\uff0c\u56e0\u4e3a\u6211\u524d\u51e0\u5e74\u5df2\u7ecf\u7533\u8bf7\u4e86\uff0c\u4f46\u597d\u50cf v2 \u6709\u4eba\u8bf4\u73b0\u5728\u4e0d\u80fd\u514d\u8d39\u7533\u8bf7\u4e86\uff1f

\n

\u8c22\u8c22

\n", "date_published": "2016-04-29T12:28:11+00:00", "title": "https://appengine.google.com \u73b0\u5728\u8fd8\u80fd\u514d\u8d39\u7533\u8bf7\u5417\uff1f", "id": "t/275398" }, { "author": { "url": "member/yeyeye", "name": "yeyeye", "avatar": "https://cdn.v2ex.com/avatar/b87f/0209/114799_large.png?m=1431583508" }, "url": "t/264681", "title": "GAE \u6709\u6ca1\u6709\u7528 PHP \u5f00\u53d1\u4e00\u4e9b\u5c0f\u7a0b\u5e8f\u7684\uff08\u53e6\u9644 PHP \u63a2\u9488\u4e00\u679a\u4ee5\u53ca\u66ff\u4ee3 MYSQL \u7684\u65b9\u6848\uff09", "id": "t/264681", "date_published": "2016-03-19T03:42:12+00:00", "content_html": "\u63a2\u9488 \u5728\u8fd9\u91cc\uff08\u90a3\u4e2a\u4e3b\u4eba\u90e8\u7f72 WP \u5931\u8d25\u4e86\uff0c\u4e8e\u662f\u5c31\u6539\u6210\u90e8\u7f72\u4e86\u4e00\u4e2a PHP \u63a2\u9488\uff09\r
\r
https://cnwordpresssss.appspot.com/\r
\r
\u53e6\u5916 GAE \u6ca1\u6709\u514d\u8d39\u7684 MYSQL \uff08\u5c31\u662f\u8fd9\u4e2a\u4e86 Google Cloud SQL \u3002\u636e\u8bf4\u4e5f\u4e0d\u80fd\u4f7f\u7528\u8fdc\u7a0b MYSQL \u670d\u52a1\u5668\uff09\uff0c\r
\r
\u4f46\u662f\u53ef\u4ee5\u8fde\u63a5\u5230 Google Cloud Datastore \u8fd9\u4e2a NosQL \u6709\u6728\u6709\u554a\u2026\u2026 \r
\r
Google \u641c\u7d22\u5230 http://stackoverflow.com/questions/19219748/can-google-cloud-datastore-access-with-php\r
\u5f97\u5230\u8fd9\u4e2a\u2026\u2026\r
https://github.com/tomwalder/php-gds\r
\u4ee5\u53ca\u6f14\u793a\r
https://github.com/tomwalder/php-gds-demo\r
http://php-gds-demo.appspot.com/\r
\r
\u7528\u5b83\u4ee3\u66ff MYSQL \u8fd8\u662f\u53ef\u4ee5\u4f7f\u7528\u7684\u5427\u2026\u2026" }, { "author": { "url": "member/skywatcher", "name": "skywatcher", "avatar": "https://cdn.v2ex.com/gravatar/d98244ab6774fe13af8bd53c75442569?s=73&d=retro" }, "url": "t/241520", "title": "\u5982\u4f55\u6d4b\u8bd5\u901a\u8fc7\u4ee3\u7406\u8bbf\u95ee\u7684\u5ef6\u65f6\uff1f", "id": "t/241520", "date_published": "2015-12-06T08:32:46+00:00", "content_html": "

\u5f00\u4e86\u5168\u5c40\u4ee3\u7406\u76f4\u63a5 cmd \u91cc ping \u663e\u793a\u8d85\u65f6

\n\n

\u6bd4\u5982\uff0c\u5f00\u4e86\u4ee3\u7406\uff0c\u60f3\u6d4b\u8bd5 ping facebook.com \u7684\u5ef6\u8fdf\u60c5\u51b5\uff0c\u600e\u4e48\u6d4b\uff1f

\n" }, { "author": { "url": "member/life", "name": "life", "avatar": "https://cdn.v2ex.com/avatar/27b0/9e18/6109_large.png?m=1322017603" }, "url": "t/232720", "title": "\u8bf7\u95ee\u73b0\u5728\u60f3\u627e\u652f\u6301 gae \u7684\u5f00\u6e90\u7a0b\u5e8f\u5e94\u8be5\u53bb\u54ea\u91cc\u5462\uff1f", "id": "t/232720", "date_published": "2015-11-01T09:18:45+00:00", "content_html": "code.google.com \u5173\u95e8\u540e\uff0c\u6ca1\u6709\u65b9\u5411\u4e86\u3002\r
\u671b\u6307\u70b9\uff01" }, { "author": { "url": "member/chinaJana", "name": "chinaJana", "avatar": "https://cdn.v2ex.com/gravatar/917248b78ab080b80dfafdf378db6657?s=73&d=retro" }, "url": "t/207696", "title": "\u4e0d\u540c\u7684 app \u6d88\u606f\u63a8\u9001\u7684\u670d\u52a1\u5404\u81ea\u6709\u4ec0\u4e48\u4f18\u52a3\uff1f", "id": "t/207696", "date_published": "2015-07-22T22:57:26+00:00", "content_html": "

\u56fd\u5916\u4e3b\u8981\u90fd\u7528GCM\uff0c\u56fd\u5185\u6bd4\u8f83\u6d41\u884c\u7684\u6709\u4e0d\u5c11\u6bd4\u5982\u767e\u5ea6\u4e91\u63a8\u9001\uff0c\u817e\u8baf\u4fe1\u9e3d\uff0c\u6781\u5149\u63a8\u9001\uff0c\u4e2a\u63a8\uff0c\u53cb\u76df\u3002\u5927\u5bb6\u80fd\u8bf4\u8bf4\u600e\u4e48\u9009\u62e9\u5408\u9002\u7684\u670d\u52a1\u5417\uff1f

\n" }, { "author": { "url": "member/MikeFish", "name": "MikeFish", "avatar": "https://cdn.v2ex.com/gravatar/d8b93f8e12b2da08d44df2e41a64cd32?s=73&d=retro" }, "url": "t/206129", "title": "\u5982\u4f55\u5f7b\u5e95\u5378\u8f7d chrome\uff1f", "id": "t/206129", "date_published": "2015-07-16T07:19:40+00:00", "content_html": "" }, { "author": { "url": "member/geeklian", "name": "geeklian", "avatar": "https://cdn.v2ex.com/avatar/0c2e/cd5c/47744_large.png?m=1382540854" }, "url": "t/200144", "title": "\u6700\u8fd1\u5c06\u81ea\u5df1\u7684\u4e00\u4e2a\u5c0f app \u8fc1\u79fb\u5230\u4e86 GAE\uff0c\u8bf4\u8bf4\u611f\u60f3\u548c\u7ecf\u9a8c\u3002", "id": "t/200144", "date_published": "2015-06-21T02:54:34+00:00", "content_html": "

\u5148\u8bf4\u8bf4\u611f\u60f3

\n\n

\u5fc3\u91cc\u53ea\u6709\u4e00\u4e07\u4e2aWTF\uff0c\u4e00\u4e07\u4e2a\u8349\u6ce5\u9a6c\u3002

\n\n

GAE\u7684Datastore\u6536\u8d39\u65b9\u6cd5\u7b80\u76f4\u4ee4\u4eba\u6076\u5fc3\uff0c\u4e00\u4e2aApp\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e2d\uff0c\u60f3\u7740\u600e\u4e48\u4f18\u5316write/read Op\uff0c\u6d6a\u8d39\u7684\u65f6\u95f4\u548c\u7cbe\u529b\uff0c\u4f60\u5b9a\u53ef\u4ee5\u8f6c\u6362\u4e3a\u5f88\u591a\u521b\u65b0\u70b9\u5b50...\u7279\u522b\u662f\u5bf9\u4e8e\u4e00\u4e2a\u4e0d\u5b58\u5728code review\u7684\u4e2a\u4ebaApp\u6765\u8bf4\u3002

\n\n

\u5982\u679capp\u81ea\u7528\u4e14\u8db3\u591f\u5c0f\uff0c\u653e\u5230GAE\u4e0a\u8ffd\u6c42\u4e2a\u7a33\u5b9a\uff0c\u8fd8\u662f\u53ef\u4ee5\u63a5\u53d7\u7684\uff0c\u4f46\u7406\u7531\u4e5f\u4ec5\u9650\u5982\u6b64\u4e86...

\n\n

\u5f53\u521d\u51b2\u52a8\u7684\u539f\u56e0

\n\n

\u672c\u6765\u662f\u4e00\u4e2apy3+Django\u5199\u7684\u5c0f\u7a0b\u5e8f\uff0c\u8dd1\u5728\u6211\u7684Linode JP VPS\u4e0a\u3002\u5728\u4f18\u5316\u6276\u5899\u7684\u8fc7\u7a0b\u4e2d\uff0c\u60f3\u5c06debian8\u6362\u6210debian7\uff0c\u7136\u540e\u60f3\u60f3\u4e3a\u4e86\u672a\u6765\u7701\u4e8b\uff0c\u611f\u89c9\u628a\u51e0\u4e2aapp\u79fb\u5230gae\u4e0a\u53bb\u5427\uff0c\u4ee5\u540e\u6298\u817evps\u4e5f\u65e0\u6240\u8c13\u4e86\u3002

\n\n

\u8f6f\u4ef6\u6210\u54c1\u5728\u6b64\uff0c\u5b9e\u73b0\u4e5f\u5f88\u7b80\u5355\uff0c\u6bcf\u4e94\u5206\u949f\u6293\u4e00\u4e9bfeed\uff0c\u7136\u540ejieba\u5206\u8bcd\uff0c\u7136\u540e\u63a8\u9001\u6d88\u606f...\u5df2\u7ecf\u8d85\u514d\u8d39\u914d\u989d\u4e86,\u5927\u5bb6\u968f\u4fbf\u770b\u770b\u5c31\u597d\uff0c\u6211\u4e0d\u662f\u804c\u4e1a\u5199\u4ee3\u7801\u7684\uff0c\u4e5f\u5c31\u4e0d\u6562\u5f00\u6e90\u51fa\u6765\u732e\u4e11\u4e86\u3002

\n\n

\u5751\u548c\u586b\u5751

\n\n

\u514d\u8d39\u7684GAE\u914d\u989d\uff0c\u4ee5\u53ca\u4e00\u4e9b\u5751

\n\n\n\n

\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5176\u4ed6\u7684\u914d\u989d\u5bf9\u5e94\u7528\u7684\u5f71\u54cd\u5fae\u4e0d\u8db3\u9053\uff1aMemcache\u662f\u514d\u8d39\u7684\u3002UrlFetch\u9664\u975e\u6293\u6765\u7684\u6570\u636e\u4e0d\u505a\u4efb\u4f55\u5904\u7406\uff0cMail\u9664\u975e\u7528\u6765\u6ee5\u53d1\u90ae\u4ef6\u3002

\n\n

NDB\u914d\u989d\u4f18\u5316

\n\n

GAE\u7684\u6570\u636e\u5e93\u989d\u5ea6\u5b58\u57283\u4e2a\u5173\u952e\uff1a

\n\n
    \n
  1. \u6fc0\u6d3b\u8d26\u5355\u540e\uff0cSmall Op\u76ee\u524d\u662f\u514d\u8d39\u7684\u4e0d\u9650\u91cf\u7684\uff0ckeys_Only=True\u53ef\u4ee5\u968f\u4fbf\u7528\u3002
  2. \n
  3. get()\u548cget_multi()\u67e5\u8be2\u4f1a\u88ab\u81ea\u52a8memcache\u3002
  4. \n
  5. indexed\u4f1a\u500d\u589ewrite Op
  6. \n
\n\n

\u63d0\u53d6\u5355\u6761\u6570\u636e\uff0c\u4f7f\u7528get_by_key_name()\uff0c\u800c\u4e0d\u662ffetch(1) / first()

\n
user = User.query(User.username = "tom").first()\n
\n\n

\u66ff\u6362\u4e3a

\n
user = User.get_by_key_name("tom")\n
\n\n

\u539f\u65b9\u6cd5\u4f1a\u6d88\u80171 Fetch Op + 1 Query Op = 2 read Op\uff0c\u4fee\u6539\u540e\uff0c\u4f1a\u4ea7\u751f1 Small Op + 1 read Op\uff0c\u800c\u4e14\u8fd9\u4e2aread Op\u4f1a\u88ab\u81ea\u52a8memcache\u3002

\n\n

\u63d0\u53d6\u591a\u6761\u6570\u636e\u65f6\uff0c\u4f7f\u7528keys_only + get_multi()

\n\n

\u6bd4\u5982\u4e00\u4e2a\u8868\u6709\uff0c\u6211\u60f3\u4e00\u6b21\u53d6\u51faN\u6761\u6570\u636e\u65f6\uff0c\u5e38\u89c4ORM\u7684\u5199\u6cd5\uff1a

\n
feeds = Feed.query().fetch(N)\n
\n\n

\u6bcf\u6b21\u67e5\u8be2\uff0c\u90fd\u4f1a\u6d88\u80171+N Read Op\uff0c\u4e3a\u4e86\u4f18\u5316\u989d\u5ea6\uff0c\u53ef\u4ee5\u4fee\u6539\u6210\uff1a

\n
q = Feed.query()\nfeeds = ndb.get_multi(q.fetch(N,keys_Only=True))\n
\n\n

\u9996\u6b21\u67e5\u8be2\uff0c\u6d88\u80171 Small Op + N Read Op\uff0c\u4f46\u662f\u5728\u91cd\u590d\u67e5\u8be2\u662f\uff0c\u5219\u53ea\u6d88\u80171 Small Op + m*N Read Op\uff0cm\u662fmemcache\u672a\u547d\u4e2d\u7684\u6982\u7387\uff0c\u7406\u60f3\u60c5\u51b5\u662f0\u3002

\n\n

\u81f3\u4e8e\u6027\u80fd\uff0c\u53ef\u4ee5\u53c2\u770b\u8fd9\u91cc,\u5927\u698275%\u7f13\u5b58\u547d\u4e2d\u662f\u6027\u80fd\u7684\u5206\u754c\u7ebf\u3002

\n
Memcache hit ratio: 100% (everything was in cache)\n\n Query for entities: 3755 ms\n Query/memcache/ndb: 3239 ms\n Keys-only query: 834 ms\n Memcache.get_multi: 2387 ms\n ndb.get_mutli: 0 ms\n\nMemcache hit ratio: 75%\n\n Query for entities: 3847 ms\n Query/memcache/ndb: 3928 ms\n Keys-only query: 859 ms\n Memcache.get_multi: 1564 ms\n ndb.get_mutli: 1491 ms\n\nMemcache hit ratio: 50%\n\n Query for entities: 3507 ms\n Query/memcache/ndb: 5170 ms\n Keys-only query: 825 ms\n Memcache.get_multi: 1061 ms\n ndb.get_mutli: 3168 ms\n\nMemcache hit ratio: 25%\n\n Query for entities: 3799 ms\n Query/memcache/ndb: 6335 ms\n Keys-only query: 835 ms\n Memcache.get_multi: 486 ms\n ndb.get_mutli: 4875 ms\n\nMemcache hit ratio: 0% (no memcache hits)\n\n Query for entities: 3828 ms\n Query/memcache/ndb: 8866 ms\n Keys-only query: 836 ms\n Memcache.get_multi: 13 ms\n ndb.get_mutli: 8012 ms\n
\n\n

\u5c3d\u53ef\u80fd\u7684\u7981\u7528\u7d22\u5f15\u3002

\n\n\n\n

\u5bf9\u4e8e\u539f\u5148\u662fin(List)\u7684\u67e5\u8be2\uff1a

\n
keys = EntryCollect.query().order(-EntryCollect.published)\nentrys = ndb.get_multi(keys.fetch(PER_PAGE*2, keys_Only=True))\nnew_entry = []\nfor entry in entrys:\n if keyword.decode('utf-8') in entry.key_word:\n new_entry.append(entry)\n
\n\n

\u5bf9\u4e8e\u539f\u5148\u662flist.IN(other_list)\u7684\u67e5\u8be2\uff1a

\n
keys = EntryCollect.query().order(-EntryCollect.published)\nentrys = ndb.get_multi(keys.fetch(PER_PAGE*2, keys_Only=True))\ntop_entry = []\nfor entry in entrys:\n if set(other_list).intersection(set(entry.key_word)):\n top_entry.append(entry)\n
\n\n

\u5bf9\u4e8e\u539f\u5148\u662fBoolean\u7684\u5b57\u6bb5\uff1a

\n
keys = EntryCollect.query().order(-EntryCollect.published)\nentrys = ndb.get_multi(kesy.fetch(CONT*2, keys_Only=True))\nfor entry in entrys:\n if entry.need_collect_word:\n # do something\n
\n\n

projected()\u7684\u5229\u5f0a\u6743\u8861

\n\n\n\n

\u8fd9\u91cc\u5c31\u6709\u4e2a\u6743\u8861\uff0c\u5982\u679cread Op\u7d27\u5f20\uff0cwrite Op\u5bcc\u88d5\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u4f7f\u7528projected()\u3002

\n\n

\u7ede\u5c3d\u8111\u6c41\u4f7f\u7528Memcache

\n\n\n\n

TextProperty \u548c StringProperty\u7684\u533a\u522b

\n\n\n\n

\u62c6\u5206App

\n\n

\u4e00\u4e2aApp\u62c6\u5206\u6210\u591a\u4e2aApp\uff0c\u662f\u6700\u7b80\u5355\u7684\uff0c\u500d\u7ffb\u5229\u7528app engine\u7684\u65b9\u6cd5\u3002

\n\n

\u5e94\u7528\u95f4\u901a\u4fe1\uff0c\u4f7f\u7528\u4ec0\u4e48\u683c\u5f0f\u6700\u6548\u7387\uff1f

\n\n

\u6839\u636e\u6211\u81ea\u5df1\u7684\u6d4b\u8bd5\u7ed3\u679c:
\n\"\"

\n\n

marshal\u53d6\u80dc\uff0c\u800c\u4e14\u5904\u7406utf-8\u66f4\u7b80\u4fbf\u4e00\u4e9b\uff0c\u4f46\u5207\u8bb0marshal\u4e0d\u80fd\u7528\u4e8e\u4e24\u4e2a\u4e0d\u540c\u7248\u672c\u7684python\u4e4b\u95f4\u5e8f\u5217\u5316\u6570\u636e\uff0c\u4e0d\u9002\u7528\u4e8e\u5f00\u653e\u7684api\u3002

\n\n

\u5982\u679c\u4f7f\u7528json\uff0c\u8981\u968f\u65f6\u6ce8\u610f\u7f16\u7801\uff1a

\n
form_fields = {\n "something": self.request.get("something", default_value="").encode("utf-8"),\n }\n form_data = urllib.urlencode(form_fields)\n result = urlfetch.fetch(url=SOME_URL,\n payload=form_data,\n method=urlfetch.POST,\n follow_redirects=False, \n headers={'Content-Type': 'application/x-www-form-urlencoded'})\n self.response.headers['Content-Type'] = 'application/json'\n self.response.out.write(result.content)\n
\n\n

\u8282\u7701\u5404\u79cd\u914d\u989d

\n\n\n\n

\u8282\u7701CPU\u914d\u989d\uff1a\u4f7f\u7528asynchronous urlfetch

\n\n

\u4e3a\u8282\u7ea6\u7f51\u7edc\u5ef6\u8fdf\u800c\u6d6a\u8d39\u7684cputime\uff0c\u4f7f\u7528\u5f02\u6b65urlfetch\u5c31\u5341\u5206\u91cd\u8981\u3002 \u5b98\u65b9\u624b\u518c\u5728\u8fd9\u91cc\uff0c\u4f8b\u5982\uff1a\u5728\u6293\u53d6\u591a\u4e2afeed\u65f6\uff1a

\n
q = Feed.query()\nresults = ndb.get_multi(q.fetch(keys_Only=True))\n\nrpcs = []\nfor f in results:\n rpc = urlfetch.create_rpc()\n urlfetch.make_fetch_call(rpc, f.url)\n rpcs.append(rpc)\n\nfor rpc in rpcs:\n rpc.wait()\n result = rpc.get_result()\n d = feedparser.parse(result.content)\n for e in d['entries']:\n #\u3000do something....\n
\n\n

\u8282\u7701CPU\u914d\u989d\uff1a\u9700\u8981\u521d\u59cb\u5316\u7684\u8d44\u6e90\uff0c\u5728\u672c\u5730\u8fdb\u884c\u5e8f\u5217\u5316\uff0cGAE\u4e0a\u76f4\u63a5\u8bfb\u53d6\u5e8f\u5217\u5316\u7684\u8d44\u6e90\u3002

\n\n

\u4ee5jieba\u8bcd\u5e93\u4e3a\u4f8b\uff1a\u9ed8\u8ba4\u60c5\u51b5\uff0cjieba\u6bcf\u6b21\u521d\u59cb\u5316\uff0c\u90fd\u4f1a\u5c06\u672c\u5730\u8bcd\u5e93dict.txt\u8fdb\u884creadline\u64cd\u4f5c\uff0c\u751f\u6210\u5b57\u5178\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5728GAE\u9ed8\u8ba4\u7684CPU\u4e0a\u9700\u8981\u5c06\u8fd16\u79d2\u3002\u5148\u5c06\u8fd9\u4e2a\u5b57\u5178\u5728\u672c\u5730\u4f7f\u7528marshal.dump\uff0c\u5728GAE\u4e2d\u5728load\uff0c\u521d\u59cb\u5316\u9636\u6bb5\u5219\u53ea\u6d88\u80171.x\u79d2\u3002

\n
try:\n with open(cache_file, 'rb') as cf:\n object_a, object_b = marshal.load(cf)\n except :\n for line in open(dict, 'rb').read().decode('utf-8').splitlines():\n # do something....\n with open(cache_file, 'wb') as cf:\n marshal.dump((object_a, object_b), cf)\n
\n\n

\u8282\u7701CPU\u914d\u989d\uff1a\u4e0d\u4f7f\u7528memcache\uff0c\u5982\u4f55\u7f13\u5b58\u4e00\u4e2a\u9875\u9762

\n\n

\u80fd\u7701\u5219\u7701\uff0c\u867d\u7136memcache\u514d\u8d39\u7684\uff0c\u4f46\u8fd8\u60f3\u7701\u6389cpu\u600e\u4e48\u529e\uff1f

\n
self.response.headers['Cache-Control'] = 'public, max-age:300' \nself.response.headers['Pragma'] = 'Public'\n
\n\n

\u8d44\u6e90\u4f18\u5316\uff1a\u5220\u6389\u8fc7\u65f6\u7684\u6570\u636e

\n\n

\u8282\u7ea6\u6570\u636e\u5e93\u5b58\u50a8\u7a7a\u95f4\u6700\u7b80\u5355\u7684\u65b9\u6cd5\uff0c\u5c31\u662f\u5220\u6389\u8fc7\u65f6\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8endb\uff0c\u4e0d\u5b58\u5728Object.query().del() \u8fd9\u6837\u7684\u65b9\u6cd5\uff0c\u9700\u8981\u4f7f\u7528\uff1a

\n
earliest = datetime.datetime.now() - datetime.timedelta(days=10)\nkeys = EntryCollect.query(EntryCollect.published <= earliest).fetch(keys_Only=True)\nndb.delete_multi(keys)\n
\n\n

\u8d44\u6e90\u4f18\u5316\uff1a\u4f7f\u7528robots.txt

\n\n

\u51cf\u5c11\u641c\u7d22\u5f15\u64ce\u5bf9app\u7684\u8d1f\u8f7d\uff0c\u4e0d\u5931\u4e3a\u4e00\u4e2a\u529e\u6cd5\uff0c\u4e00\u4e2a\u4e2a\u4f4d\u6570pv\u7684app\uff0c\u88abbot\u62d6\u5230\u914d\u989d\u8d85\u9650\u771f\u7684\u597d23333...

\n\n

\u540e\u8bb0

\n\n

\u7136\u540e\uff1f\u7136\u540e\u5c31\u6ca1\u6709\u7136\u540e\u4e86...
\n\u6211\u7528\u4e00\u4e2a\u5468\u672bdjango\u5199\u7684app\uff0c\u7528\u4e862\u4e2a\u5468\u672b\u8fc1\u79fb\u5230gae\u4e0a\uff0c\u8ddf\u914d\u989d\uff0c\u7279\u522b\u662fDatastore write/read Op\u594b\u6597\u4e862\u4e2a\u661f\u671f\uff0c\u7ecf\u9a8c\u5199\u51fa\u6765\uff0c\u5e0c\u671b\u540c\u6837\u86cb\u75db\u7684V\u53cb\u4eec\u5c11\u8d70\u5f2f\u8def\u3002

\n\n

\u672c\u4eba\u4e0d\u662f\u804c\u4e1a\u7a0b\u5e8f\u5458\uff0c\u91d1\u878d\u4ece\u4e1a\u8005\uff0c\u5e0c\u671b\u5c11\u62cd\u4ee3\u7801\u7816=.=

\n" }, { "author": { "url": "member/holinhot", "name": "holinhot", "avatar": "https://cdn.v2ex.com/avatar/85a7/680f/96641_large.png?m=1709429220" }, "url": "t/200091", "title": "google cloud \u7684 sql \u4e0d\u540c\u5730\u533a\u600e\u4e48 ping \u8d77\u6765\u90fd\u662f 0.2ms", "id": "t/200091", "date_published": "2015-06-20T14:12:08+00:00", "content_html": "

\u6bd4\u5982\u6211\u5efa\u5728\u53f0\u6e7e\u548c\u6b27\u6d32\u7684sql \u4ece\u7f8e\u56fdgce\u8fde\u63a5\u8fc7\u53bb\u5c310.2ms \u8fd9\u592a\u5c4c\u4e86 \u4e0d\u79d1\u5b66\u554a

\n" }, { "author": { "url": "member/musray", "name": "musray", "avatar": "https://cdn.v2ex.com/avatar/2bea/5e5b/18406_large.png?m=1775551557" }, "url": "t/196550", "date_modified": "2015-06-06T09:51:53+00:00", "content_html": "

\u6700\u8fd1\u5728\u7814\u7a76GAE\uff0c\u6839\u636e\u5b98\u65b9\u7684Python Tutorial\u5c1d\u8bd5\u4e86\u7b80\u5355\u7684\u9879\u76ee\u914d\u7f6e\u3002\u5c1d\u8bd5Locally run\uff0c\u6210\u529f\u3002\u5c1d\u8bd5Deploy\uff0c\u5931\u8d25\u3002\u6211\u6267\u884c\u8fc7\u7684\u8be6\u7ec6\u6b65\u9aa4\u5982\u4e0b\uff1a

\n\n
    \n
  1. \u65b0\u5efa\u6587\u4ef6\u5939helloworld

  2. \n
  3. \u5728\u6587\u4ef6\u5939\u5185\u65b0\u5efahelloworld.py,\u5185\u5bb9\u5982\u4e0b\uff1a

    \n
    import webapp2\n\nclass MainPage(webapp2.RequestHandler):\n def get(self):\n self.response.headers['Content-Type'] = 'text/plain'\n self.response.write('Hello, World!')\n\napp = webapp2.WSGIApplication([\n ('/', MainPage),\n], debug=True)\n
  4. \n
  5. \u5728\u6587\u4ef6\u5939\u5185\u65b0\u5efaapp.yaml\u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b:

    \n\n
    \n

    version: 1
    \nruntime: python27
    \napi_version: 1
    \nthreadsafe: true

    \n\n

    handlers:
    \n- url: /.*
    \n script: helloworld.app

    \n
  6. \n
  7. \u5728GAE\u5ba2\u6237\u7aef\u9009\u62e9\u52a0\u8f7dhelloworld\u6587\u4ef6\u5939\uff0c\u5e76\u4e14run\u8fd9\u4e2a\u9879\u76ee\uff0c\u5728\u6d4f\u89c8\u5668\u91cc\u53ef\u4ee5\u770b\u5230\u4e00\u884chello world\u3002
    \n\u8fd9\u4e2a\u6b65\u9aa4\u6211\u6ca1\u95ee\u9898\u3002

  8. \n
  9. \u5728GAE console\u91cc\u65b0\u5efa\u4e00\u4e2a\u9879\u76ee\u3002\u5c06\u9879\u76eeID\u52a0\u5165app.yaml\u6587\u4ef6\u7684\u9996\u884c\u3002

  10. \n
  11. \u5728GAE\u5ba2\u6237\u7aef\u9009\u62e9deploy\uff0c\u5c06\u9879\u76ee\u90e8\u8fdb\u884c\u90e8\u7f72\u3002
    \n\u6211\u5c31\u662f\u5931\u8d25\u5728\u8fd9\u4e00\u6b65\uff0c\u90e8\u7f72\u5931\u8d25\u3002log\u6587\u4ef6\u663e\u793a\u5185\u5bb9\u5982\u4e0b\uff1a

    \n\n
    \n

    *** Running appcfg.py with the following flags:
    \n--oauth2_credential_file=~/.appcfg_oauth2_tokens update

    \n\n

    No previously stored oauth2 token found.
    \nA browser will be opened to ask for user permission.

    \n\n

    07:34 AM Application: my-first-app-967; version: 1
    \n07:34 AM Host: appengine.google.com
    \n07:34 AM
    \nStarting update of app: my-first-app-967, version: 1
    \n07:34 AM Getting current resource limits.

    \n
  12. \n
\n\n

\u76ee\u524d\u8fdb\u884c\u8fc7\u7684\u5c1d\u8bd5\uff1a

\n\n
    \n
  1. \u4f7f\u7528\u547d\u4ee4\u884c\u8fdb\u884c\u90e8\u7f72
    \nappcfg.py update my_project_folder
    \n\u5931\u8d25\u3002\u547d\u4ee4\u884c\u63d0\u793a\u540c\u6837\u7684\u9519\u8bef\u3002

  2. \n
  3. \u91cd\u542f\u7535\u8111\uff0c\u91cd\u88c5GAE\u5ba2\u6237\u7aef
    \n\u5931\u8d25\u3002\u4ecd\u7136\u662f\u540c\u6837\u7684\u9519\u8bef\u3002

  4. \n
  5. \u589e\u52a0Extra Flag
    \n--noauth_local_webserver
    \n\u5931\u8d25\u3002\u4e0d\u4ec5deploy\u5931\u8d25\uff0clocally run\u90fd\u5931\u8d25\u4e86\u3002

  6. \n
\n\n

\u5b9e\u5728\u662f\u641e\u4e0d\u61c2\u4e86\uff0c\u632b\u8d25\u611f\u3002\u5e0c\u671b\u5927\u5bb6\u5fd9\u5e2e\u3002

\n", "date_published": "2015-06-06T09:46:35+00:00", "title": "Google App Engine \u65e0\u6cd5\u5b9e\u73b0\u5b98\u65b9 python \u6559\u7a0b helloworld \u7684 deploy\uff0c\u5e0c\u671b\u5927\u5bb6\u5e2e\u5fd9", "id": "t/196550" }, { "author": { "url": "member/yegle", "name": "yegle", "avatar": "https://cdn.v2ex.com/avatar/2823/f479/756_large.png?m=1577898727" }, "url": "t/189080", "title": "Google \u4e0e AppScale \u5408\u4f5c\u8d21\u732e\u4ee3\u7801\u7ed9 App Engine \u5f00\u6e90\u5b9e\u73b0", "id": "t/189080", "date_published": "2015-05-06T18:06:01+00:00", "content_html": "http://googlecloudplatform.blogspot.com/2015/05/AppScale-and-App-Engine-Work-Together-to-Provide-Infrastructure-Flexibility.html

AppScale\u76ee\u524d\u63d0\u4f9b\u4e86App Engine SDK 1.8\u7684\u517c\u5bb9\uff0c\u76ee\u524dApp Engine SDK\u7684\u7248\u672c\u662f1.9.20\u3002Google\u5c06\u4e0eAppScale\u5408\u4f5c\u8d21\u732e\u4ee3\u7801\u4ee5\u5b9e\u73b0App Engine SDK 1.9\u7684\u517c\u5bb9\uff0c\u5b9e\u73b0\u73b0\u6709app\u53ef\u4ee5\u6258\u7ba1\u5728\u5176\u4ed6\u4e91\u8ba1\u7b97\u5e73\u53f0\u3002

* \u5728Google Compute Engine\u4e0a\u8fd0\u884cAppScale: http://www.appscale.com/get-started/appscale-faststart-on-google-compute-engine/
* \u5728Amazon EC2\u4e0a\u8fd0\u884cAppScale http://www.appscale.com/get-started/appscale-faststart-on-ec2/" }, { "author": { "url": "member/ujmxyd", "name": "ujmxyd", "avatar": "https://cdn.v2ex.com/gravatar/9aed2f2dfa85205fce72a3c01c5d599b?s=73&d=retro" }, "url": "t/183048", "title": "\u6709\u591a\u5c11\u4eba\u8ba4\u4e3a GAE == GoAgent?", "id": "t/183048", "date_published": "2015-04-11T06:50:14+00:00", "content_html": "\u770b\u5230\u4e86 t/182937 \u7684\u6807\u9898\uff0c\u8fd8\u4ee5\u4e3aGoogle App Engine\u51fa\u4ec0\u4e48\u7cfb\u7edf\u6545\u969c\u4e86\uff0c\u70b9\u8fdb\u53bb\u624d\u53d1\u73b0\u662f\u5728\u8bf4GoAgent\u2026\u2026
\u8bb0\u5f97\u6211\u4e00\u5f00\u59cb\u7528\u7684\u662f\u5404\u79cd\u5728\u7ebf\u4ee3\u7406\uff0c\u7136\u540e\u662f\u8f6e\u5b50\u7684\u5de5\u5177\u3002\u63a5\u4e0b\u6765\u53d1\u73b0\u4e86GAppProxy(\u4f5c\u8005\u5c45\u7136\u7528\u4e86188\u90ae\u7bb1\uff0c\u4f30\u8ba1\u51f6\u591a\u5409\u5c11\u4e86)\uff0cHTTPS\u5f88\u9ebb\u70e6\u3002\u7136\u540e\u6362\u4e86GAppProxy2\u3001WallProxy(\u8001\u7248\u7684\uff0c\u59cb\u7ec8\u8bb0\u5f97\u5b83\u7684\u90a3\u4e9b\u52a0\u5bc6\u65b9\u5f0f)\uff0c\u6700\u540e\u6362\u5230GoAgent\u3002\u867d\u7136\u73b0\u5728\u6709\u4e00\u4e2a\u975e\u5e38\u6162\u7684shadowsocks\uff0c\u4f46GoAgent\u8fd8\u662f\u7535\u8111\u4e0a\u7684\u9996\u9009\u3002
\u5c3d\u7ba1\u6211\u627f\u8ba4Google App Engine\u5bf9\u5927\u90e8\u5206\u77e5\u9053\u5b83\u7684\u56fd\u4eba(\u5305\u62ec\u6211)\u5c31\u662f\u4e00\u4e2a\u6bcf\u59291G\u6d41\u91cf(\u6211\u77e5\u9053\u53ef\u4ee5\u591aAPPID\uff0c\u4f46\u662fTOS\u7981\u6b62\u7684)\u7684\u7a33\u5b9a\u4ee3\u7406\uff0c\u4f46\u662f\u628aGAE\u548cGoAgent\u76f4\u63a5\u5212\u7b49\u53f7\uff0c\u4e0d\u592a\u597d\u5427\u3002(\u6211\u642d\u5efa\u4e86\u4e00\u4e2a(\u6ca1\u4eba\u8bbf\u95ee\u7684)micolog\u548c\u4e00\u4e2a\u5012\u8ba1\u65f6)" }, { "author": { "url": "member/myexcite", "name": "myexcite", "avatar": "https://cdn.v2ex.com/avatar/c5c2/42ec/42249_large.png?m=1532438455" }, "url": "t/182937", "title": "\u4eca\u5929 GAE \u7a81\u7136\u53d8\u5f97\u5f88\u4e0d\u7a33\u5b9a", "id": "t/182937", "date_published": "2015-04-10T14:07:06+00:00", "content_html": "

\u4e00\u4f1a\u7ba1\u7528\uff0c\u4e00\u4f1a\u4e0d\u7ba1\u7528\uff0c\u7ba1\u7528\u7684\u65f6\u5019\u5f88\u5c11\u3002
\n\u672c\u4eba\u4e0d\u662f\u7a0b\u5e8f\u5458\uff0c\u6c42\u53ef\u80fd\u7684\u539f\u56e0\u5206\u6790\u3002

\n" }, { "author": { "url": "member/sjlleo", "name": "sjlleo", "avatar": "https://cdn.v2ex.com/avatar/ec9d/9c21/94744_large.png?m=1657353753" }, "url": "t/181167", "title": "\u79d8\u5bc6\uff08\u4e0d\u8981\u5916\u4f20\uff09\uff1a\u53eb\u4f60\u5982\u4f55\u628a\u90a3\u4e9b\u6240\u8c13\u7684 NN\uff08 BadRespon\uff09\u7528\u5230 Goagent \u91cc\u9762\u53bb\uff01", "id": "t/181167", "date_published": "2015-04-02T09:27:49+00:00", "content_html": "\u7ecf\u6d4b\u8bd5\u53d1\u73b0GWF\u53ea\u4f1a\u53bb\u5c01https\uff08\u52a0\u5bc6\uff09\u7684GG ip\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u65e0\u6548IP\u7f6e\u4e4b\u4e0d\u7406\uff0c\u73b0\u5728\u4e0d\u7528\u4e5f\u53ef\u60dc\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5145\u5206\u7684\u5229\u7528\u8d77\u6765\u3002
\u8bf4\u6765\u65b9\u6cd5\u4e5f\u7b80\u5355\uff0c\u4e0d\u5c31\u662f\u90a3\u4e9bip\u4e0d\u80fd\u52a0\u5bc6\u8bbf\u95ee\u800c\u88ab\u629b\u5f03\u4e48\uff1f\u6d4b\u8bd5\u540e\u53d1\u73b0\u8fd9\u4e9bIP\u4e0d\u52a0\u5bc6\u4e5f\u6709\u5b8c\u6574\u529f\u80fd\uff0c
\u6240\u4ee5\u6211\u4eec\u53ea\u8981\u628agoagent\u7684\u8fde\u63a5IP\u7684\u65b9\u5f0f\u6539\u6389\uff0c3.0\u7684\u5728proxy.ini\u6587\u4ef6\u91cc\u9762\uff0c[\u6279\u6ce8\uff1a\u6700\u5927\u7684\u5f31\u70b9\u4e0d\u80fd\u52a0\u5bc6\u8bbf\u95ee\u8c37\u6b4c\u53ca\u65d7\u4e0b\u7f51\u7ad9\uff0c\u5176\u4f59\u52a0\u5bc6\u7f51\u7ad9\u90fd\u53ef\u4ee5]
\u628a\u539f\u6765 mode\u4e2d\u7684https \u6539\u4e3ahttp\uff1a
\uff08\u539f\u6765\uff09
password =
path = /_gh/
mode = https
ipv6 = 0
sslversion = TLSv1
window = 7
cachesock = 1
headfirst = 1
\u73b0\u5728\uff1a
password =
path = /_gh/
mode = http
ipv6 = 0
sslversion = TLSv1
window = 7

\u73b0\u5728\u4f60\u5728\u8bd5\u8bd5\uff01Do it now!" }, { "author": { "url": "member/malu8linux", "name": "malu8linux", "avatar": "https://cdn.v2ex.com/avatar/d065/37ab/101692_large.png?m=1425541022" }, "url": "t/174686", "title": "GAE \u8fd8\u80fd\u7528\u5417\uff1f\u6211\u6ca1\u6cd5\u63d0\u4ea4\u4ee3\u7801\u4e86", "id": "t/174686", "date_published": "2015-03-05T07:37:43+00:00", "content_html": "\u539f\u672c\u7684GAE\u5347\u7ea7\u5230\u4e86https://console.developers.google.com/project/ \u8fd9\u4e2a\u4e0a\uff0c\u6700\u8fd1\u5ba2\u6237\u7aef\u6ca1\u6cd5\u66f4\u65b0\u4ee3\u7801\u4e86\uff0c\u5230\u5e95\u662f\u600e\u4e48\u56de\u4e8b\uff1f
\u8c37\u6b4c\u5f00\u59cb\u6536\u8d39\u4e86\u5417\uff1f" }, { "author": { "url": "member/yegle", "name": "yegle", "avatar": "https://cdn.v2ex.com/avatar/2823/f479/756_large.png?m=1577898727" }, "url": "t/172588", "title": "App Engine \u652f\u6301 PHP 5.5 \u8fd0\u884c\u65f6\uff0c\u6dfb\u52a0 curl \u652f\u6301", "id": "t/172588", "date_published": "2015-02-24T21:33:52+00:00", "content_html": "1.9.18 SDK\u4e2d\u65b0\u589e\u4e86PHP 5.5\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u5728app.yaml\u4e2d\u7528runtime: php55\u6765\u4f7f\u7528\u3002

\u8fd9\u6b21\u8fd0\u884c\u65f6\u9644\u5e26curl\u652f\u6301\u3002\u4f5c\u4e3a\u6700\u5e38\u7528\u7684PHP\u6a21\u5757\u4e4b\u4e00\uff0c\u6b64\u6b21\u66f4\u65b0\u589e\u52a0\u4e86curl\u652f\u6301\u3002

\u867d\u7136curl\u901a\u5e38\u5728PHP\u4e2d\u7528\u4e8e\u521b\u5efaHTTP\u8bf7\u6c42\uff0c\u5b83\u7684\u529f\u80fd\u4e0d\u4ec5\u9650\u4e8eHTTP\u3002\u5b98\u65b9\u7f51\u7ad9\u4e0a\u5217\u51fa\u4e86\u652f\u6301\u7684\u534f\u8bae\u5217\u8868\uff1a

curl is a command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling and more.

\u6b64\u6b21\u6dfb\u52a0\u7684PHP curl\u6a21\u5757\u901a\u8fc7Socket API\u5b9e\u73b0\u4e86\u4e0a\u8ff0\u7edd\u5927\u591a\u6570\u534f\u8bae\u7684\u652f\u6301\u3002

\u6ce8\u610f\uff1a

* Socket API\u9700\u8981\u6253\u5f00\u8d26\u6237\u7684billing\u529f\u80fd\uff08\u7ed1\u5b9a\u4e00\u5f20\u4fe1\u7528\u5361\uff09\u624d\u80fd\u4f7f\u7528\u3002\u8bf7\u6ce8\u610f\u533a\u5206\u201c\u6253\u5f00billing\u201d\u548c\u201c\u6536\u8d39\u201d\u7684\u533a\u522b\uff1a\u6253\u5f00billing\u540e\u539f\u6709\u7684free quota\u4ecd\u7136\u5b58\u5728\uff0cSocket API\u4e5f\u6709\u4e00\u90e8\u5206free quota\u53ef\u4ee5\u4f7f\u7528 https://cloud.google.com/appengine/docs/quotas#Sockets
* \u5982\u679c\u4ec5\u4ec5\u662f\u60f3\u4f7f\u7528curl\u6a21\u5757\uff0c\u901a\u8fc7URLFetch API\u8bbf\u95eeHTTP\u8d44\u6e90\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u6b21\u65b0\u589e\u7684CurlLite\u3002use google\\appengine\\runtime\\CurlLite;" }, { "author": { "url": "member/yili", "name": "yili", "avatar": "https://cdn.v2ex.com/gravatar/8b87c79afd9e6e01e031bb5492e90d92?s=73&d=retro" }, "url": "t/169153", "title": "Gogent \u96c6\u6210\u641c\u7d22 google ip~", "id": "t/169153", "date_published": "2015-02-07T15:26:13+00:00", "content_html": "\u770b\u5230\u4e0d\u5c11v\u53cb\u4e0d\u77e5\u9053\u5982\u4f55\u627eip\uff0c\u770b\u8fd9\u91cc\uff1a https://github.com/XX-net/XX-Net/
\u8bf7\u53eb\u6211\u96f7\u950b\uff0c\u4e0d\u8c22\uff5e" }, { "author": { "url": "member/lenovo", "name": "lenovo", "avatar": "https://cdn.v2ex.com/avatar/09cb/c3f8/73204_large.png?m=1486793349" }, "url": "t/168684", "title": "GoAgent \u8fd8\u662f\u5f88\u597d\u7528\u7684...", "id": "t/168684", "date_published": "2015-02-06T00:53:57+00:00", "content_html": "

5\u4e2aGAE APP\uff0c\u627e\u4e00\u4e9b\u6e2f\u6fb3\u53f0\u65e5\u97e9\u7684IP...
\n\"IMG\"
\n\"IMG\"
\n\"IMG\"
\n\"IMG\"
\n\"IMG\"
\n\"IMG\"

\n" }, { "author": { "url": "member/killsting", "name": "killsting", "avatar": "https://cdn.v2ex.com/avatar/5c69/5210/83931_large.png?m=1630285414" }, "url": "t/167578", "title": "\u5168\u65b0 GoAgent/GoGotest \u4e00\u4f53\u5316\u96c6\u6210\u8f6f\u4ef6 XX-Net \u53d1\u5e03", "id": "t/167578", "date_published": "2015-02-02T06:50:11+00:00", "content_html": "\u5168\u65b0GoAgent/GoGotest\u4e00\u4f53\u5316\u96c6\u6210\u8f6f\u4ef6 XX-Net\u53d1\u5e03\uff1a

http://www.abclite.org/880" } ] } ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86