为什么我的javascript WebSocket会死掉?Python

2024-04-26 18:49:15 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试制作一个简单的文本聊天套接字服务器。我对服务器编码很陌生。我有这段工作代码,但问题是WebSocket()在我身上悄无声息地死去:

javascript控制台中的输出是 打开 关闭

几乎没有什么资源可以帮助我理解这种行为。为什么我的python服务器在发送头之后就终止连接?我的回复是否正确?任何帮助都将是惊人的。在


Python代码:



    import socketserver
    import re
    from base64 import b64encode
    from hashlib import sha1

    inited = 0

    class MyTCPHandler(socketserver.BaseRequestHandler):

        def handle(self):
            global inited
            if(inited==0):
                print(self)
                text = self.request.recv(1024).strip()
                self.upgradeConnection(text)
                self.request.send("a sweet message from the server!".encode("utf-8"));
                inited = 1
            else:
                self.request.sendall("second response!".encode("utf-8"));

        def upgradeConnection(self,text):
            #print("Client wants to upgrade:")
            #print(text);
            websocket_answer = (
                'HTTP/1.1 101 Switching Protocols',
                'Upgrade: websocket',
                'Connection: Upgrade',
                'Sec-WebSocket-Accept: {key}\r\n\r\n',
            )

            GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
            #print(re.search(b'Sec-WebSocket-Key:\s+(.*?)[\n\r]+', text))
            key = (re.search(b'Sec-WebSocket-Key:\s+(.*?)[\n\r]+', text)
                .groups()[0]
                .strip())

            #print(key.decode("utf-8"))
            #print(key.decode("utf-8") + GUID)
            #print(sha1((key.decode("utf-8") + GUID).encode("utf-8")))

            response_key = b64encode(sha1((key.decode("utf-8") + GUID).encode("utf-8")).digest()).decode("utf-8")
            #print(response_key)
            response = '\r\n'.join(websocket_answer).format(key=response_key)
            self.request.send(response.encode("utf-8"));




    HOST, PORT = "localhost", 9999
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

网页代码:

^{pr2}$

Tags: key代码textimportself服务器responserequest