我正在用python编写一个websocket服务器,在将消息发送回客户端时遇到了问题。使用 chrome 的 javascript 控制台,我可以找到此错误消息:
如果没有协商的放气帧扩展,压缩位必须为 0
但除此之外,我找不到任何关于这实际上意味着什么的文档。你可以在这里找到这个问题(和代码)的开始。我有点不知所措。我尝试过使用第一个字节,将其更改为全 0,但根据this ,如果此文档正确,第二个位(在我的情况下为 0)应该是“压缩位” ;
“WebSocket 帧头中的一个保留位 RSV1 被分配用于控制每个消息的压缩应用。”
所以我不完全确定从这里去哪里。在 Firefox 中,错误只是“页面加载时与 ws://localhost:8080/ 的连接中断”。错误。
编辑:这是接收消息时的解析代码:
def parse( self, data, client_socket ):
display_server_message( "Received message:\n%s" % str( data ) )
byte_array = bytearray( data )
mask = []
message_string = ""
for i in range( 0, len( byte_array ) ):
b = byte_array[ i ]
if i > 0 and i < 2:
b = b & 0b01111111
if i > 1 and i < 6:
mask.append( byte_array[ i ] )
if i > 5:
b = b ^ mask[ (i - 2) % 4 ]
message_string = message_string + chr( b )
display_server_message( "Decoded Message:\n%s" % message_string )
if ( message_string == "a test message" ):
time.sleep( 5 )
self.send_message( "Hello, how are you?", client_socket )
pat = re.compile( "Sec-WebSocket-Key: (\S+)", re.MULTILINE )
for match in pat.findall( data ):
magic_string = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
message = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: %s\r\n\r\n" % base64.standard_b64encode( hashlib.sha1( match + magic_string ).digest() )
client_socket.send( message )
display_server_message( "Message Sent:\n%s" % message )