Sju*_*sen 6 python sockets google-app-engine
我正在使用AE套接字API,我做了以下测试:
class TestHandler(webapp.RequestHandler):
def get(self):
size = 1024 * 4
start = datetime.datetime.now()
for _ in range(10):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('some.ip.here', 12345))
sock.send('some dummy data')
data = ''
newData = 'dummy'
while newData != '' and not newData.endswith('\r\n'):
newData = sock.recv(size)
#print newData
data += newData
print '.'
sock.close()
#print 'timespent:' + str(datetime.datetime.now() - start)
logging.info('timespent:' + str(datetime.datetime.now() - start))
Run Code Online (Sandbox Code Playgroud)
我注意到单个请求大约需要400毫秒到500毫秒后才开始进行一些测试.正在回答请求的服务器位于Google GCE实例上.该请求的处理时间平均为0:00:00.0005秒.因此大多数延迟与网络相关.我认为一个很好的响应时间将是100毫秒.如果我知道这需要一些硬件,我甚至可以用200ms.但我不认为除了一些安全措施之外应该有所不同.但这会禁止某些功能,而不是让它变慢.
谁能解释为什么差异如此之大?
我花了相当长的时间试图通过具体的公共站点重现这个问题,但似乎我做不到。
我的代码版本(足够丰富,因此它实际上可以运行并显示结果)...:
import datetime
import logging
import socket
import webapp2
class TestHandler(webapp2.RequestHandler):
def get(self):
size = 1024 * 4
start = datetime.datetime.now()
for _ in range(10):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('216.58.216.4', 80))
sock.send('GET / HTTP/1.0\n\r\n\r')
data = ''
newData = 'dummy'
while newData != '' and not newData.endswith('\r\n'):
newData = sock.recv(size)
#print newData
data += newData
print '.'
sock.close()
msg = 'timespent:{} for:{}'.format(
datetime.datetime.now() - start, len(data))
logging.info(msg)
self.response.write('<p>{}</p>'.format(msg))
app = webapp2.WSGIApplication([
('/timit', TestHandler),
], debug=True)
Run Code Online (Sandbox Code Playgroud)
该 IP 号是 www.google.com 的一个(最好www.google.com在其位置使用主机名,但您指定了一个 IP 号,所以我尝试了这一点),并且交互当然只是使用古老的 HTTP 获取其主页1.0 协议。
结果各不相同,但我刚才得到的结果是一个非常典型的结果:
timespent:0:00:02.748760 for:52823
Run Code Online (Sandbox Code Playgroud)
我在本地运行时得到的数字dev_appserver.py与上传到<myappid>.appspot.com.
所以我做了一个完全独立于GAE的版本:
import datetime
import logging
import socket
def doit():
size = 1024 * 4
start = datetime.datetime.now()
for _ in range(10):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('216.58.216.4', 80))
sock.send('GET / HTTP/1.0\n\r\n\r')
data = ''
newData = 'dummy'
while newData != '' and not newData.endswith('\r\n'):
newData = sock.recv(size)
#print newData
data += newData
print '.'
sock.close()
msg = 'timespent:{} for:{}'.format(
datetime.datetime.now() - start, len(data))
logging.info(msg)
print('<p>{}</p>'.format(msg))
doit()
Run Code Online (Sandbox Code Playgroud)
你猜怎么着——运行它,在一堆点之后,向我展示了一个非常相似的结果
<p>timespent:0:00:02.421856 for:52853</p>
Run Code Online (Sandbox Code Playgroud)
所以我不知道下一步该做什么。也许一年多前你进行观察时就出现了问题,但现在已经消失了;也许这与您要连接的特定 IP 的地理位置有关(靠近您的本地计算机,远离您的 GAE 应用程序运行的位置);谁知道呢——没有更多的信息和具体的 IP 等,这实际上是对您观察到的内容的完全盲目猜测。
就我而言,我现在所在的本地计算机位于加利福尼亚州桑尼维尔,就网络延迟而言,我非常确定正在运行的两个 Google 服务(www.google.com 和 myapp.appspot.com) ,不可能离这里那么远(我的 ping 值平均为 50 或 60 毫秒)。
最好能就此结束,这是“未回答的”google-app-engine 问题中得票最高的......!-)
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |