2011-08-28 39 views
5

cố gắng làm cho gevent-websocket hoạt động và nó không kết nối với máy chủ chính sách của tôi cho đặc tả flash. policy.py của tôi là như sau:Máy chủ chính sách với gevent-websocket

from gevent.server import StreamServer 

policy = """<?xml version="1.0" encoding="UTF-8"?> 
<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="master-only"/> 
<allow-access-from domain="*" to-ports="*" secure="false"/> 
</cross-domain-policy>\0""" 

def handle(sock, address): 
s = sock.makefile() 
while True: 
    msg = s.readline() 
    if not msg: 
     print("Client disconnected (%s:%s)" % address) 
     break 
    else: 
     sock.sendall(policy) 
     print("Client connected, served policy (%s:%s)" % address) 

server = StreamServer(('0.0.0.0', 843), handle) 
server.serve_forever() 

Tuy nhiên, với WebSocket tôi nhận được:

[WebSocket] policy file: xmlsocket://localhost:843 
[WebSocket] cannot connect to Web Socket server at ws://localhost:8065 (SecurityError: Error #2048) make sure the server is running and Flash socket policy file is correctly placed 
[WebSocket] close 

Trả lời

2

phương pháp readline() sẽ không làm việc ở đây, vì Flash sẽ gửi một '<policy-file-request/>\0' mà không chấm dứt bằng dòng mới.

Hãy thử điều này thay vì readline():

expected = '<policy-file-request>' 
s.read(len(expected)) 
+0

Cảm ơn, mà làm việc hoàn hảo! – d0ctor

Các vấn đề liên quan