小编Har*_*yte的帖子

Python 3中的Websocket实现

尝试为Python3支持的应用程序创建Web前端.该应用程序将需要双向流,这听起来像是查看websockets的好机会.

我的第一个倾向是使用已经存在的东西,mod-pywebsocket的示例应用程序已被证明是有价值的.不幸的是,他们的API似乎并不容易扩展,而且它是Python2.

环顾博客圈,许多人为早期版本的websocket协议编写了​​自己的websocket服务器,大多数人都没有实现安全密钥哈希所以不行.

阅读RFC 6455我决定自己尝试一下,并提出以下建议:

#!/usr/bin/env python3

"""
A partial implementation of RFC 6455
http://tools.ietf.org/pdf/rfc6455.pdf
Brian Thorne 2012
"""

import socket
import threading
import time
import base64
import hashlib

def calculate_websocket_hash(key):
    magic_websocket_string = b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
    result_string = key + magic_websocket_string
    sha1_digest = hashlib.sha1(result_string).digest()
    response_data = base64.encodestring(sha1_digest)
    response_string = response_data.decode('utf8')
    return response_string

def is_bit_set(int_type, offset):
    mask = 1 << offset
    return not 0 == (int_type & mask)

def set_bit(int_type, offset):
    return int_type | (1 << offset)

def bytes_to_int(data): …
Run Code Online (Sandbox Code Playgroud)

sockets websocket python-3.x mod-pywebsocket

7
推荐指数
1
解决办法
3012
查看次数

注释 Python3 中静态方法的返回类型

我开始使用更多 Python3 的类型支持,我希望能够注释staticmethods作为替代构造函数的返回类型。

下面是一个最小的例子;如果我包含注释,它会失败:

def from_other_datastructure(json_data: str) -> MyThing:
    NameError: name 'MyThing' is not defined
Run Code Online (Sandbox Code Playgroud)
import typing


class MyThing:
    def __init__(self, items: typing.List[int]):
        self.items = items

    @staticmethod
    def from_other_datastructure(json_data: str):
        return MyThing(
            [int(d) for d in json_data.split(',')]
        )

if __name__ == '__main__':
    s1 = MyThing([1, 2, 3])

    s2 = MyThing.from_other_datastructure("2,3,4")
Run Code Online (Sandbox Code Playgroud)

那么如何在为类型注释定义类之前引用类呢?

python-3.x

2
推荐指数
1
解决办法
1176
查看次数

标签 统计

python-3.x ×2

mod-pywebsocket ×1

sockets ×1

websocket ×1