使用 twisted 写一个服务器, 如何区分浏览器的刷新和关闭操作?

2016-05-26 11:45:20 +08:00
 JhOOOn

实现的方式类似这样:

from twisted.web import server, resource
from twisted.internet import reactor, endpoints

class Counter(resource.Resource):
    isLeaf = True
    numberRequests = 0

    def render_GET(self, request):
        self.numberRequests += 1
        request.setHeader(b"content-type", b"text/plain")
        content = u"I am request #{}\n".format(self.numberRequests)
        return content.encode("ascii")

endpoints.serverFromString(reactor, "tcp:8080").listen(server.Site(Counter()))
reactor.run()

每次请求会模拟一个长连接,满足条件在返回。目前在使用这种方式统一处理浏览器刷新或关闭(目前发现刷新时有时不会触发):

request._disconnected

因需求变了, 刷新和关闭需要分别对待,那么 twisted 支持这种机制吗? 谢谢

2150 次点击
所在节点    服务器
4 条回复
pimin
2016-05-26 11:50:59 +08:00
浏览器动作不应该是前端去考虑,用 js 处理嘛?
JhOOOn
2016-05-26 11:58:13 +08:00
@pimin 当收到一个请求时,我会模拟一个长连接,满足条件在返回。在 twisted 里,目前我的理解是,当发生刷新或者关闭时, twisted 会自动触发该条件: request._disconnected 。
JhOOOn
2016-05-26 11:59:55 +08:00
@pimin 经过你的提醒,我想到了不用 twisted 的机制,改为前端判断,来传递相应的结果,服务器在处理响应的结果,应该也可以,待验证。
sujin190
2016-05-26 13:23:48 +08:00
现代浏览器处理网络不是每个页面单独打开的,应该是按域名共享的,页面在使用完连接只是返回连接池了,一定时间之后才会关闭吧,你关闭页面也好、刷新页面也好,和连接是否断开有什么关系呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX