Python瓶子向socket发送原始响应

时间:2017-08-09 11:03:36

标签: python websocket bottle

我一直在使用gevent-websocket一段时间,但由于某种原因,它在OSX和Linux上都神秘地破坏了。 bitbucket和pypi的人在没有响应的情况下驳回了我的请求,就像stackoverflow上的人一样。我正计划编写自己的WebSocket实现,但我需要访问管理原始数据发送和接收的原始连接对象(如socket模块中的套接字对象)。我在哪里可以找到瓶装?我正在寻找可能如下所示的代码:

@route("/websocket")
def ws():
    raw_conn = ??? # socket object from socket module
    # initialize websocket here, following protocols and then send messages
    while True:
        raw_conn.send(raw_conn.recv()) # Simple echo

1 个答案:

答案 0 :(得分:0)

我为此做了一些有用的代码:

import abc
import socket


class Communication(metaclass=abc.ABCMeta):
    def __init__(self, port):
        self.port = port
        self.connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def send_message(self, message):
        self.my_connexion.send(message.encode())

    def wait_for_message(self, nb_characters = 1024):
        message = self.my_connexion.recv(nb_characters)          
        return message.decode()

    def close_connexion(self):
        self.connexion.close()


class Client(Communication):
    def __init__(self, port):
        Communication.__init__(self, port)     
        self.connexion.connect(("localhost", port))
        self.my_connexion = self.connexion

class Server(Communication):
    def __init__(self, port, failed_connexion_attempt_max = 1):
        Communication.__init__(self, port)

        self.connexion.bind(("", port))
        self.connexion.listen(failed_connexion_attempt_max)
        self.my_connexion, address = self.connexion.accept()

    def close_connexion(self):
        self.client_connexion.close()
        self.connexion.close()