2012-08-15 5 views
3

webkit + node.js 프레임 워크 인 app.js를 사용하여 채팅 응용 프로그램을 개발 중입니다. 그래서 양쪽에 bridge.js와 브리징 된 웹 브라우저 환경이 있습니다. 파일 전송 기능을 Skype와 다소 비슷하게 만들고 싶습니다. 메인 서버에두 node.js 인스턴스간에 파일을 효율적으로 전송하는 방법은 무엇입니까?

1. 연결 클라이언트 :

그래서, 초기 아이디어이다.

2. 각 클라이언트는 oposite의 ip를 얻습니다.

3. 두 클라이언트의 소켓 또는 웹 소켓 서버를 시작하고 서로 연결합니다.

4. 송신자가 파일을 읽고 송신자에게 전송합니다.

질문은 다음과 같습니다 하나의 클라이언트가 다른 "볼"수

1.Im 정말 확실하지 않다.

2. 파일은 이진 데이터이지만 웹 소켓은 텍스트 메시지 용으로 만들어져 있으므로 코딩/디코딩 방법이 필요합니다. 베이스 64에 대해 생각했지만 30 %의 오버 헤드 정보가 있습니다. 그래서 좀 더 effitient (기본 128?) 뭔가가 필요합니다.

3. TCP 소켓을 사용해야한다면 websocket을 사용하는 것이 효율적이지 않습니까? 내가 그들을 사용하기로 결정하면 어떤 문제가 나타날 수 있습니까?

그래, 내가 대략 node2nodeBinaryJS에 대해 알고있다. 나는 그걸 사용해야하는지 알지 못한다. 그리고 나는 정말로 무엇인가 스스로해야합니다.

+0

Socket.io는 중간에 서버가 없어도 클라이언트 - 클라이언트 연결을 허용하지 않습니다. 귀하의 파일은 C -> S -> C로 여행해야합니다. – rdrey

+0

저는 실제로 클라이언트와 서버가 양쪽에 있습니다. –

+0

나는 당신이하는 일을 이해하고 있다고 생각한다 : 중앙 서버와 두 클라이언트에서 실행되는 서버 (클라이언트 웹 프론트 엔드 포함)? – rdrey

답변

2

OK, 커뮤니케이션은 다음과 같이 찾고 :

(C-> N) < -> N < -> (N-> C)

(...)에 설치 한 클라이언트의 기계. N은 노드 서버이고 C는 웹 클라이언트입니다.

  1. 이 당신의 통제를 벗어났습니다. 일부 파일 공유 응용 프로그램은 중앙 서버에서 클라이언트로 테스트 패킷을 전송하여 포트가 열려 있고 NAT 규칙이 올바르게 구성되어 있는지 확인합니다. 클라이언트는 일부 포트에서 자체 서버를 시작하며 마스터 서버는 잠재적으로 테스트 연결을 만들 수 있습니다. 이 서버가 제대로 시작되었는지 웹에 열려 있는지 확인한 후 다른 클라이언트에게 파일을 보낼 수 있음을 알리기 전에

  2. 웹 소켓은 서버에서 웹 GUI 및 일반 클라이언트 - 클라이언트 통신에 이르는 상태 메시지에 유용합니다. 실제 파일 전송의 경우 TCP 소켓을 사용합니다. 다음 응답을 참조하십시오. 반대로 Base64 인코딩은 느린 프로세스가 아니며, 그 성능을 벤치마킹 한 다음 일부 데이터로 결정을 백업합니다.

  3. 서버의 웹 소켓에서 웹 GUI 로의 조합을 사용할 수 있지만 서버 자체 간의 TCP 통신은 사용할 수 있습니다. TCP 서버 (및 스트림)는 Node에서 설정하는 것이 어렵지 않습니다. 단점이 없습니다. 실제로는 TCP가 이미 내장되어 있으므로 해당 서버에 node2node을 설치하는 것보다 덜 복잡 할 수 있습니다.

+0

입니다. 기본 64 인코딩 된 데이터의 원래 길이는 ~ 130 %입니다. 이미 BinaryJS를 기꺼이 사용하고 있습니다. –

관련 문제