2012-09-13 7 views
1

Socket.IO를 사용하여 Node.JS 앱이 Python 백엔드와 통신 할 수있게하려고합니다. Node.JS가 클라이언트 역할을하고 Python이 서버 역할을하기를 바라고 gevent-socketio python 모듈 외에도 socket.io-client Node.JS 모듈을 사용합니다. 여기 node.js socket.io-client + python socketio

#!/usr/bin/env python 
from socketio.server import SocketIOServer 
from socketio.namespace import BaseNamespace 

class MyNamespace(BaseNamespace): 
    def on_foobar(self,data): 
     print 'received method for foobar' 
     print data 


server = SocketIOServer(('localhost', 1234),resource=MyNamespace,policy_server=False) 
print 'SocketIO server listening...' 
server.serve_forever() 

내 Node.js를 서버 (클라이언트 역할)입니다 : 여기 https://github.com/abourget/gevent-socketio

https://github.com/LearnBoost/socket.io-client 내 파이썬 서버입니다

#!/usr/bin/env node 
var io = require('socket.io-client'); 
var PySocket = io.connect('localhost:1234'); 
PySocket.emit('foobar',{'key1':'value1'}); 

어떤 이유인지, python 서버에서 연결이 보이지 않습니다. 아무도 내가 누락 된 것을 지적 할 수 있습니까?

답변

1

파이썬쪽에 조금 더 필요할 것입니다.

Namespace 객체를 SocketIOServer 객체에 매개 변수로 전달할 수 없습니다. 그 후 resource (나중에 namespace으로 이름이 바뀜)은 인식 할 경로의 이름입니다 (예 : http : // localhost/[namespace]/[나머지 socket.io 프로토콜 경로]). 그러나 우리는 거의 socket.io 이외의 리소스/네임 스페이스를 다루지 않습니다.

이제 파이썬 IO 서버가 실행되기 위해서는 몇 가지 프레임 워크를 사용하여 포장해야합니다. 실제로 들어오는 요청을 올바른 핸들러로 보내야합니다 이 핸들러는 socketio_manage()을 실행해야하며 이것은 네임 스페이스 객체를 매개 변수로 전달해야하는 기능입니다. 또한 .swf ... gevent-socketio와 같은 다른 파일을 제공하고 싶을 수도 있습니다. 당신은 또한 파이썬 프로세스가 (데이터베이스와 상호 작용하고, 일부 설정 파일을로드하는 것과 같이) 무엇이든하기를 원한다면, 파이 그것은 무엇보다도 당신의 삶을 편하게 해줄 것입니다.

node.js에서 python까지 socket 유형의 서버를 갖고 싶다면 표준 TCP/UDP 소켓을 사용하지 않는 이유는 무엇입니까? 이 경우 프레임 워크의 오버 헤드, Socket.IO 프로토콜의 인코딩/디코딩 등이 필요하지 않습니다.

특정 사용 사례는 무엇입니까? 어쩌면 이것은 갈 길을 밝힐 수 있습니다.

+0

특정 사용 사례 = node.js와 python 간의 기본 통신. .swf 또는 다른 종류의 콘텐츠를 제공 할 필요가 없으므로 프레임 워크가 필요 없다고 생각했습니다. – ejang

+0

TCP/UDP는 버퍼 크기 등을 추적해야하기 때문에 일종의 성가심입니다. 사용할 수있는 더 간단한 소켓 라이브러리가 있습니까? – ejang

+0

또한, 파이썬이 데이터의 특정 플래그를 구문 분석하지 않고도 특별히 응답 할 수있는 메소드를 지정하기 때문에 socket.io emit() 함수가 유용합니다. 난 성가신 일종의 여러 포트에서 연결을 설정하지 않는 한 일반 소켓으로 가능하다고 생각하지 않습니다 – ejang

관련 문제