

Pythonで[simple-websocket-server](https://github.com/dpallot/simple-websocket-
server)というWebSocketのライブラリを使ってServerがデータを受信したらそれを自分が指定したQueueに格納したいのですがうまくいきません。

このライブラリでは`WebSocket`クラスを継承してハンドラとなるクラスを作り、それを`SimpleWebSocketServer`のコンストラクタの`cls`引数として渡すようになっています。

自分が渡したQueueにデータを格納したいので下記のように関数`f`にqueueを渡し、その返り値の関数がMyWebSocketのインスタンスをreturnするようにしたのですが、うまくいかず、`localhost:4246`にアクセスしても接続が確立されません。

Windows10 1803  
Python3.6.5

[code]

    class MyWebSocket(WebSocket):
        def __init__(self, server, sock, address, q): # queueを受け取る(q)
            super().__init__(server, sock, address)
            self.q = q
        def handleMessage(self):
            print(self.data)
            self.q.put_nowait(self.data) #わたってきたデータをqueueに格納
    
        def handleClose(self):
            print("connection: closed " + self.address)
            self.sendMessage("server exit")
            sys.exit()
    def f(l):
        def websocketclasscaller(server, sock, address): # SimpleSSLWebSocketServerはclsの引数が増えていることを知らないので`websocketclasscallerで隠す`
            return MyWebSocket(server, sock, address, l)
        return websocketclasscaller
    
    def main(q):
        p = f(q)
        server = SimpleSSLWebSocketServer("localhost", 4246, p, "../certs/server.crt", "../certs/server.key")
        server.serveforever()
    
[/code]

SimpleSSLWebSocketServerの継承元であるSimpleWebSocketServerが引数clsをインスタンス化しているところ:

[code]

       def _constructWebSocket(self, sock, address):
          return self.websocketclass(self, sock, address)
    
[/code]

[Github上のコード](https://github.com/dpallot/simple-websocket-
server/blob/34e6def93502943d426fb8bb01c6901341dd4fe6/SimpleWebSocketServer/SimpleWebSocketServer.py#L589:L590)


CC BY-SA 4.0
2018-06-11T15:25:23.933
44706
2018-06-13T08:41:56.993
2018-06-13T08:41:56.993
5246
5246
question
python python3 websocket
Pythonで引数として渡すクラスのコンストラクタを書き換える