2010-12-05 3 views
2

현재 우분투 서버를 위해 C++에서 확장 가능한 서버 디자인을 만들고 있습니다. LAN을 통한 배관이 가능합니까? 신속한 LAN 간 통신을위한 최선의 선택은 무엇입니까?LINUX : LAN을 통한 배관이 가능합니까? 그렇다면 바람직합니까? 다른 옵션은 무엇입니까?

관심있는 사람들을위한 배경 정보 : 친구와 함께 멀티 플레이어 게임을 만들고 있습니다. 그것은 TCP 기반이 될 것입니다. 서버를 멀티 클라이언트로 만드는 것은 클라이언트 당 새로운 프로세스를 생성하거나 연결된 클라이언트의 fdset을 통해 선택하는 것을 의미합니다. 이러한 접근 방식을 결합하여 100 명의 클라이언트를 선택하고 체인의 모든 변경 사항을 "작업 마스터"프로세스에보고하는 "관리자"프로세스를 갖고 싶습니다. 그러면 프로세스가 다른 관리자 프로세스에 변경 내용을 배포합니다. 관리자와 작업 마스터가 같은 상자에 있으면이 작업은 파이핑 작업과 잘 작동하지만 나중에 다시 확장하려면 신속한 LAN 간 통신 방법이 필요합니다.

+3

파이프가 실제로하는 것은 아닙니다. 소켓을 사용해야합니다. 멀티 클라이언트가되기 위해서는 새로운 프로세스가 반드시 필요한 것은 아닙니다. 각 클라이언트가 새로운 프로세스를 생성하면 확장 할 수 없습니다. – Falmarri

+0

@Falmarri : 그렇습니다. 그래서 저는 100 명의 고객까지 처리 할 수있는 새로운 프로세스를 생각하고있었습니다. – returneax

답변

1

스트림 소켓 (SOCK_STREAM, 엄격하게 로컬 인 경우 AF_UNIX 또는 tcp/ip 이상인 경우 AF_INET)은 모든 데이터가 정렬 된 양방향 파이프와 동일한 네트워크입니다.

+0

좋습니다, 감사합니다.이것은 엄격히 현지 일 것입니다. reddit에서 얻은 몇 가지 제안은 멀티 캐스트 시스템의 일부 유형을 구현하고 작업 마스터를 완전히 제거하는 것이 었습니다. – returneax

0

LAN은 일반적으로 이더넷 기반 네트워크입니다. 즉, 네트워크에서 실행중인 모든 프로토콜은 이더넷 기반이어야합니다. TCP/IP는 이더넷 네트워크에서 작동 할 수 있지만 파이프와 로컬 소켓은 단일 호스트에서 프로세스 간 통신으로 만 설계되므로 다중 호스트 응용 프로그램에는 적합하지 않습니다.

다양한 구성 요소가 다른 호스트에서 실행되는 경우 일부 TCP/IP 기반 프로토콜을 통해 링크해야합니다. 이더넷을 통해 실행되는 IPX 및 UUCP와 같은 일부 레거시 프로토콜이 있지만 이들은 TCP/IP로 완전히 대체되었습니다.

2

netcat 응용 프로그램을 확인하십시오. 이 TCP 포트 1234에서 수신합니다

nc -l -p 1234 | myApp 

, 그것은 표준 출력에 걸쳐받는 모든 인쇄 : 하나의 시스템에서, 당신은 당신의 프로세스에 출력을 파이프, 서버로 netcat을 실행할 수 있습니다.

그리고 두 번째 시스템에

: 192.168.1.2이 첫 번째 컴퓨터의 IP 주소입니다

myApp | nc 192.168.1.2 1234 

. 특정 세부 사항은 nc 매뉴얼 페이지를 참조해야합니다. 위의 내용은 모두 메모리에 있습니다.

+0

멋진 정보 주셔서 감사합니다. – returneax

1

그 질문을하는 것만으로도 관련 프로세스 간의 통신에 파이프가 필요한 대답이라는 인식이있는 것 같습니다.

시스템에 대한 몇 가지 구성 요소이든 클라이언트 서버 쌍이든 관계없이 두 프로세스 간의 통신이 필요하다고 생각할 수 있습니다. 그런 다음 주어진 지리에서 작동하는 메커니즘을 선택합니다. 프로세스가 로컬 일 경우 파이프가 작동합니다. 복사 금지 채널에 공유 메모리 대기열을 사용할 수도 있습니다. 루프백 인터페이스를 통해 IP (소켓을 통해)를 사용할 수도 있습니다. 네트워크 (WAN 또는 LAN)로 이동하려면 IP를 사용해야합니다.

마지막으로 TCP 외에도 UDP를 사용하는 것도 고려해야합니다. 메시지 경계가 내장되고 엔드 포인트 관리가 쉬워지기 때문입니다.

관련 문제