1

我是 python 和 websockets 的新手,想了解更多关于如何使用 pywebsocket 的信息。

目前,我正在编辑 pywebsocket 包中的示例,不幸的是,我无法理解以下代码中的错误:

_GOODBYE_MESSAGE = u'Goodbye'

def web_socket_do_extra_handshake(request):
    request.ws_stream.send_message("Welcome", binary=False) # Error line
    pass  # Always accept.

def web_socket_transfer_data(request):
    while True:
        line = request.ws_stream.receive_message()
        if line is None:
            return
        if isinstance(line, unicode):
            request.ws_stream.send_message("Sending", binary=False)
            request.ws_stream.send_message(line, binary=False)
            if line == _GOODBYE_MESSAGE:
                return
        else:
            request.ws_stream.send_message(line, binary=True)

我想在连接初始化时向客户端发送“欢迎”消息。但是当我从 Handshake 发送任何消息时,我的 websocket 用代码 1006关闭了

为什么呢?

我认为问题可能是,握手期间无法发送任何数据,所以我尝试了这种方式:

_GOODBYE_MESSAGE = u'Goodbye'
welcome = True

def web_socket_do_extra_handshake(request):
    pass  # Always accept.

def web_socket_transfer_data(request):
    while True:
        if welcome:
            welcome = False
            request.ws_stream.send_message("Welcome !", binary=False)

        line = request.ws_stream.receive_message()
        if line is None:
            return
        if isinstance(line, unicode):
            request.ws_stream.send_message("Sending", binary=False)
            request.ws_stream.send_message(line, binary=False)
            if line == _GOODBYE_MESSAGE:
                return
        else:
            request.ws_stream.send_message(line, binary=True)

我在第一种或第二种情况下都没有成功,你能解释一下我做错了什么吗?谢谢

PS:我将 mod_pywebsocket 作为 Apache 的模块运行(不是独立的),我的 python 版本是 2.6.6;我试图运行我的两个脚本$python script_wsh.py来检查语法错误

4

1 回答 1

0

我在示例中发现了这个错误:

第一个代码

握手期间无法向客户端发送任何消息

web_socket_do_extra_handshake 在成功解析标头并将 WebSocket 属性(ws_location、ws_origin 和 ws_resource)添加到请求后,在握手期间调用。处理程序可以通过引发异常来拒绝请求。

第二个代码

可能,我的代码中有不好的缩进


调试 websocket 处理程序的最简单方法是在调试模式下运行 websocket:

# Run standalone server with "--log-level debug"
./standalone.py -p 12345 --allow-draft75 -d example --log-level debug

# For apache module version, add LogLevel directive to httpd.conf
LogLevel debug

我正在将 websockets 作为 apache 模块运行,我现在可以在 apache 的错误日志中看到解析(和其他)错误

于 2013-02-28T21:11:55.543 回答