如何在龙卷风websocket,Python中获取客户端连接对象

时间:2015-05-15 05:57:51

标签: python websocket tornado

我正在使用tornado websocket来获得简单的测试代码。 在测试代​​码中,我想获得tornado.websocket.WebSocketHandler

例如,我在下面使用过这种方式。

class ConvPlayerInterface(object):

    class WebsocketHandler(tornado.websocket.WebSocketHandler):

        client = None
        queue = ipcQueue.IpcQueue()

        def open(self):
            print 'new connection'
            self.client = self #in my simple code, it handles only one client.     

            self.write_message("Connection Open")

        def on_message(self, message):
            self.queue.put(message)

        def on_close(self):
            print 'connection closed'

    def __init__(self, url='/ws'):
        self.application = tornado.web.Application([(url, self.WebsocketHandler),])
        self.httpServer = tornado.httpserver.HTTPServer(self.application)
        self.httpServer.listen(8888)

        self.queue = self.WebsocketHandler.queue

        self.ioLoop = threading.Thread(target = tornado.ioloop.IOLoop.instance().start)

    def start(self):
        self.ioLoop.start()

    def get(self):
        return self.queue.get()

    def put(self, command):
        self.WebsocketHandler.client.write_message(command)

但在self.WebsocketHandler.client.write_message(command)方法调用put()时,Python称client为非类型。

有什么建议吗?

它通常用于获取tornado中的客户端连接处理程序对象?

1 个答案:

答案 0 :(得分:0)

在代码的这一部分

<?php 
session_start();
require("connectToEvent_log.php");
$connectToEvent = connect2db();
$uid = '2'; // for the filnal version: @$_SESSION['uid'];

$view_event = "SELECT * FROM event_log WHERE uid = $uid";
$view_event_query = mysqli_query($connectToEvent, $view_event);
$num_rows = mysqli_num_rows($view_event_query);
$rows = mysqli_fetch_array($view_event_query);

?>

<html>
<head>
    <title>Events</title>
</head>
    <body>
        <form action="viewEvents.php" method="POST">
            <table border="1">
                <thead>
                    <tr>
                        <td>Id</td>
                        <td>Date</td>
                        <td>Hours</td>
                        <td>Checkbox</td>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    for ($i = 0; $i < count($num_rows); $i++) {
                    ?>
                        <tr>
                            <td><?php print $rows[$i]["eid"]; ?></td>
                            <td><?php print $rows[$i]["date"]; ?></td>
                            <td><?php print $rows[$i]["hours"]; ?></td>
                            <td><input type="checkbox" name="row[<?php $rows[$i]["eid"]?>][checkbox]" value="1" <?php if ($rows[$i]["accepted"]) print ' checked="checked"'; ?>/></td>
                        </tr>
                    <?php
                    }
                    ?>
                </tbody>
            </table>
            <input type="submit" />
        </form>
    </body>
</html>

您正在访问WebsocketHandler类,而不是类成员。 并且正如预期的那样,WebsocketHandler的“client”属性为None。

将为龙卷风接受的每个请求创建WebsocketHandler实例,因此可以同时存在多个websocket处理程序。

如果你真的想要只处理一个连接 - 你可以这样做:

 def put(self, command):
        self.WebsocketHandler.client.write_message(command)