2014-09-26 7 views
0

python3.3 클라이언트에서 작업 중입니다. 래칫 - wamp PHP 서버에 연결하고 주제에 가입해야합니다. asyncio와 autobahn을 설치했습니다.websocket + wamp : 서버 PHP 및 클라이언트 python, tcp 연결이 끊어짐

이 예제는 https://github.com/tavendo/AutobahnPython/blob/master/examples/asyncio/wamp/beginner/client.py을 따르지만 TCP 연결이 끊어지면 핸드 셰이크가 작동하지 않습니다.

모든 디버그를 활성화 결과는 다음과 같습니다

[('debug', True, 'WampWebSocketClientFactory'), 
('debugCodePaths', False, 'WampWebSocketClientFactory'), 
('logOctets', True, 'WampWebSocketClientFactory'), 
('logFrames', True, 'WampWebSocketClientFactory'), 
('trackTimings', False, 'WampWebSocketClientFactory'), 
('allowHixie76', False, 'WampWebSocketClientFactory'), 
('utf8validateIncoming', True, 'WampWebSocketClientFactory'), 
('applyMask', True, 'WampWebSocketClientFactory'), 
('maxFramePayloadSize', 0, 'WampWebSocketClientFactory'), 
('maxMessagePayloadSize', 0, 'WampWebSocketClientFactory'), 
('autoFragmentSize', 0, 'WampWebSocketClientFactory'), 
('failByDrop', True, 'WampWebSocketClientFactory'), 
('echoCloseCodeReason', False, 'WampWebSocketClientFactory'), 
('openHandshakeTimeout', 5, 'WampWebSocketClientFactory'), 
('closeHandshakeTimeout', 1, 'WampWebSocketClientFactory'), 
('tcpNoDelay', True, 'WampWebSocketClientFactory'), 
('autoPingInterval', 0, 'WampWebSocketClientFactory'), 
('autoPingTimeout', 0, 'WampWebSocketClientFactory'), 
('autoPingSize', 4, 'WampWebSocketClientFactory'), 
('version', 18, 'WampWebSocketClientFactory'), 
('acceptMaskedServerFrames', False, 'WampWebSocketClientFactory'), 
('maskClientFrames', True, 'WampWebSocketClientFactory'), 
('serverConnectionDropTimeout', 1, 'WampWebSocketClientFactory'), 
('perMessageCompressionOffers', [], 'WampWebSocketClientFactory'), 
('perMessageCompressionAccept', 
    <function WebSocketClientFactory.resetProtocolOptions.<locals>.<lambda> at 0x00000000031619D8>, 
    'WampWebSocketClientFactory')] 
connection to 192.168.100.218:44444 established 
TX Octets to 192.168.100.218:44444 : sync = False, octets = b'474554202f20485454502f312e310d0a557365722d4167656e743a204175746f6261686e507974686f6e2f302e392e310d0a486f73743a206c6f63616c686f73743a38300d0a557067726164653a20576562536f636b65740d0a436f6e6e656374696f6e3a20557067726164650d0a507261676d613a206e6f2d63616368650d0a43616368652d436f6e74726f6c3a206e6f2d63616368650d0a5365632d576562536f636b65742d4b65793a204f4d753955674b565442697375665741796246332b413d3d0d0a5365632d576562536f636b65742d50726f746f636f6c3a2077616d702e322e6a736f6e2e626174636865642c77616d702e322e6a736f6e0d0a5365632d576562536f636b65742d56657273696f6e3a2031330d0a0d0a' 
GET/HTTP/1.1 

User-Agent: AutobahnPython/0.9.1 

Host: localhost:80 

Upgrade: WebSocket 

Connection: Upgrade 

Pragma: no-cache 

Cache-Control: no-cache 

Sec-WebSocket-Key: OMu9UgKVTBisufWAybF3+A== 

Sec-WebSocket-Protocol: wamp.2.json.batched,wamp.2.json 

Sec-WebSocket-Version: 13 




RX Octets from 192.168.100.218:44444 : octets = b'485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a557067726164653a20776562736f636b65740d0a436f6e6e656374696f6e3a20557067726164650d0a5365632d576562536f636b65742d4163636570743a2049332f372f7745784b626d65705975796835444177384d683936593d0d0a582d506f77657265642d42793a20526174636865742f302e322e370d0a0d0a81265b302c2235343235363164383232613866222c312c22526174636865745c2f302e322e37225d' 
received HTTP response: 

b'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: I3/7/wExKbmepYuyh5DAw8Mh96Y=\r\nX-Powered-By: Ratchet/0.2.7\r\n\r\n' 


received HTTP status line in opening handshake : HTTP/1.1 101 Switching Protocols 
received HTTP headers in opening handshake : {'connection': 'Upgrade', 'upgrade': 'websocket', 'sec-websocket-accept': 'I3/7/wExKbmepYuyh5DAw8Mh96Y=', 'x-powered-by': 'Ratchet/0.2.7'} 
WAMP-over-WebSocket transport lost: wasClean = False, code = 1006, reason = 'connection was closed uncleanly (I failed the WebSocket connection by dropping the TCP connection)' 
Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\autobahn-0.9.1-py3.3.egg\autobahn\wamp\websocket.py", line 75, in onClose 
    self._session.onClose(wasClean) 
AttributeError: 'WampWebSocketClientProtocol' object has no attribute '_session' 
connection to 192.168.100.218:44444 lost 

서버입니다 확인 (이 함께 연결되어있는 다른 응용 프로그램). 어떠한 제안? Thx!

답변

1

fryederich,

래칫은 WAMP v1 not v2를 지원합니다. 사용하려는 Autobahn 클라이언트는 WAMP v2 용입니다. 호환되는 클라이언트의 경우 Autobahn Python 0.8.5을 사용해야합니다.

WAMPv2 호환 PHP 라이브러리가 필요하면 Thruway (이 프로젝트의 개발자 중 한 명)을 살펴보십시오. 최신 버전의 Autobahn Python과 JS에서 작동합니다.

+0

감사합니다. 목표에 도달했지만 다른 방식으로 해결되었습니다. – fryederich

0

Daviddan에 따르면 문제는 Wamp의 다른 버전 (asyncio는 V2, Ratchet V1을 사용함)이었습니다. 나는 서버 (Wamp V1) 나 클라이언트의 파이썬 버전 (파이썬 3.3에서는 wamp V1 구현을 찾지 못했습니다)을 변경할 수 없습니다 : 간단한 웹 소켓 파이썬 모듈 ("websocket")을 사용하여 wamp V1 프로토콜을 구현했습니다 매우 간단합니다 (here the V1 specifications).