首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tornado:不接受连接

Tornado:不接受连接
EN

Stack Overflow用户
提问于 2014-05-13 00:34:04
回答 1查看 735关注 0票数 0

这是基本的web套接字测试:

代码语言:javascript
复制
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("Hello World")

    def on_message(self, message):
        print 'message received %s' % message

    def on_close(self):
      print 'connection closed'


application = tornado.web.Application([
    (r'/ws', WSHandler),
])


if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

我想要处理许多连接,对于一些连接,我想接受,而另一些则拒绝。

有什么干净利落的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 01:33:38

WebSocketHandler实例有一个request属性。

因此,我将检查open方法中的self.request,以决定是立即关闭连接、发送错误消息,还是将连接添加到列表中以供以后处理。

类似于:

代码语言:javascript
复制
class WSHandler(tornado.websocket.WebSocketHandler):

    connections = []

    def open(self):
        if self.request.remote_ip == '127.0.0.1':
            self.write_message('go away home')
            self.close()
        else:
            self.write_message('welcome')
            self.connections.append(self)

您可以通过reading the tornado source Luke查看所有可供检查的属性。

如果您希望根据密码接受或拒绝连接,则需要将该逻辑添加到on_message方法中。您还需要在连接上维护一些状态。就像这样。

代码语言:javascript
复制
class WSHandler(tornado.websocket.WebSocketHandler):

    users = {'dave': 'password1234'}

    def open(self):
        self.authed = False

    def on_message(self, message):
        if self.authed:
            pass # handle already authed messages here
        else:
            # authenticate a connection here
            username, password = message.split(':')
            if self.users.get(username) == password:
                self.authed = True
                self.write_message('Welcome back %s.' % (username,))
            else:
                self.write_message('Auth failed')

请记住,这不是我实际使用的密码协议。这只是一个例子,展示了如何创建一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23614340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档