어떻게 python 으로 Zeroc Ice 응용 프로그램 을 개발 합 니까?
Zeroc ICE(Internet Communications Engine,인터넷 통신 엔진)는 현재 기능 이 비교적 강하 고 완 선 된 RPC 프레임 워 크 로 크로스 플랫폼,크로스 언어 호출 을 지원 합 니 다.TCP,UDP,SSL/TSL 또는 WebSocket 연결 을 통 해 동기 화,비동기 호출,서버 와 클 라 이언 트 간 의 양 방향 연결 을 지원 할 수 있 습 니 다.Zeroc ICE 의 효율 이 매우 높 고 효율 적 인 바 이 너 리 프로 토 콜 을 사용 하여 대역 폭 에 대한 소모 가 비교적 적다.심지어 위성 을 통한 RPC 호출 에 대해 서 는 제로 ICE 가 데이터 흐름 을 더 압축 할 수도 있다.또한 Zeroc ICE 는 패키지 해제 없 이 호출 요청 을 리 트 윗 할 수 있어 일반 리 트 윗 시 패키지 해제,재 압축 시간 을 줄 일 수 있다.
Zeroc ICE 의 응용 은 icegrid 에 배치 하여 격자 계산 을 실현 할 수 있다.즉,클 라 이언 트 가 호출 할 때 목표 호스트 를 지정 하지 않 아 도 되 고 ICE 가 찾 는 것 을 책임 진다.서버 도 호출 할 때 만 열 수 있 습 니 다.동적 로드;같은 서비스 도 여러 개 를 배치 하여 높 은 가용성 을 실현 할 수 있다.
실험 안내
Zeroc ICE 는 C++,C\#,Java,JavaScript,Python,Objective-C,Ruby,PHP,VB 등 크로스 언어 RPC 호출 을 지원 합 니 다.이번 실험 은 Python(Pyhon 2.7 이상 또는 Python 3 모두 가능)을 채택 했다.실험의 내용 은 icegrid 에 간단 한 서버 를 배치 하고 클 라 이언 트 가 호출 될 때 지정 한 내용 을 출력 하고 문자열 을 되 돌려 주 는 것 입 니 다.실험 절 차 는 다음 과 같다.
이번 실험 에 적 용 된 운영 체 제 는 우 분투 14.04 다.다른 운영 체 제 를 사용 하면Zeroc ICE문서 에 따라 조정 할 수 있다.
제로 아 이 스 설치
시스템 에 Zeroc ICE 가 설치 되 어 있 지 않 고 ubuntu 의 소프트웨어 소스 에 도 zeroc ice 가 없 으 면 아래 절차 에 따라 설치 할 수 있 습 니 다.
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 5E6DA83306132997
sudo apt-add-repository "deb http://zeroc.com/download/apt/ubuntu$(lsb_release -rs) stable main"
sudo apt-get update
sudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev
설치 후 시스템 에 slice2cpp,slice2java 등 Sliece(Zeroc ICE 가 정의 하 는 인터페이스 설명 언어,IDL)파일 을 해당 언어 로 변환 하 는 프로그램 과 icegrid,iceregistry,icegridadmin 등 프로그램 이 있 습 니 다.대상 언어 도구(예 를 들 어 slice2py)나 개발 패키지 가 없 으 면 특별 설치 가 필요 합 니 다.Zeroc ICE 를 설치 한 python 개발 패키지
물론 이 단계 전에 python 과 pip(python 의존 관리 도구)를 먼저 설치 해 야 합 니 다.Zeroc ICE 의 python 개발 패키지(또는 모듈)는 zeroc-ice 라 고 하 며 pip 로 설치 할 수 있 습 니 다.
sudo -H pip install zeroc-ice
설치 과정 에서 일부 C/C++헤더 파일 이 부족 한 문제 가 발생 할 수 있 습 니 다.예 를 들 어 python.h,openssl/ssl.h,bzlib.h 가 부족 한 것 은 해당 하 는 개발 패 키 지 를 설치 하지 않 았 기 때 문 입 니 다.다음 명령 을 통 해 해결 할 수 있 습 니 다.
sudo apt-get install python-dev
sudo apt-get install libssl-dev
sudo apt-get install libbz2-dev
서버 와 클 라 이언 트 개발『8195』다음은 진정한 서버 와 클 라 이언 트 개발 입 니 다.개발 과정 은 보통:
// Printer.ice
module Demo {
interface Printer {
string printString(string s);
};
};
지정 한 언어의 인터페이스 파일 생 성이번 개발 에 사 용 된 언어 는 python 이기 때문에 사용 합 니 다.
slice2py Printer.ice
예 를 들 어 slice2java,slice2cpp.
명령 이 성공 적 으로 실행 되 었 습 니 다.대상 디 렉 터 리 에 Printer 가 생 성 되 었 음 을 볼 수 있 습 니 다.ice.py 파일 과 데모 디 렉 터 리 입 니 다.Demo 는 slice 인터페이스 파일 에서 정 의 된 module 이름 입 니 다.
컴 파일 서버
import sys, traceback, Ice
import Demo
# PrinterI ,Demo.Printer slice2py
class PrinterI(Demo.Printer):
def printString(self, s, current=None):
print(s)
return "Server Printed: " + s
status = 0
ic = None
try:
# zeroc ice
ic = Ice.initialize(sys.argv)
# SimplePrinterAdapter , tcp, 10000
adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000")
# , SimplePrinter
object = PrinterI()
adapter.add(object, ic.stringToIdentity("SimplePrinter"))
#
adapter.activate()
# , ice ,
ic.waitForShutdown()
except:
traceback.print_exc()
status = 1
if ic:
# Clean up
try:
ic.destroy()
except:
traceback.print_exc()
status = 1
sys.exit(status)
server.cfg 내용 은 다음 과 같 습 니 다.
PrinterAdapter.AdapterId=PrinterAdapter
PrinterAdapter.Endpoints=tcp
그 중에서 tcp 의 뜻 은 tcp 프로 토 콜 을 통 해 호출 되 고 서버 는 tcp 프로 토 콜 의 연결 요청 을 감청 합 니 다.클 라 이언 트 작성
import sys, traceback, Ice
import Demo
status = 0
ic = None
try:
ic = Ice.initialize(sys.argv)
# SimplePrinter , tcp , 10000
base = ic.stringToProxy("SimplePrinter:default -p 10000")
#
printer = Demo.PrinterPrx.checkedCast(base)
if not printer:
raise RuntimeError("Invalid proxy")
# printString ,
rs = printer.printString("Hello World, I'm talking to you through RPC")
print(rs)
except:
traceback.print_exc()
status = 1
if ic:
# Clean up
try:
ic.destroy()
except:
traceback.print_exc()
status = 1
sys.exit(status)
클 라 이언 트 의 설정 파일 은 다음 과 같 습 니 다.
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
클 라 이언 트 직렬 서버상기 프로그램 개발 이 끝 난 후에 icegrid 에 배치 하지 않 아 도 바로 실행 할 수 있 습 니 다.설정 파일 은 icegrid 에서 위치 추적 과 연결 서 비 스 를 사용 합 니 다.이 때 는 서버 를 실행 하면 서 클 라 이언 트 를 실행 하고 기능 을 검사 할 수 있 습 니 다.
python Server.py
프로 세 스 가 끝나 지 않 고 연결 을 기다 리 고 있 는 것 을 볼 수 있 습 니 다.그리고 다른 터미널 을 만들어 클 라 이언 트 프로그램 을 실행 합 니 다.
python Client.py
『8195』실행 후 서버 와 클 라 이언 트 창의 출력 을 볼 수 있 습 니 다.
icegrid 에 배치
icegrid 는 Zeroc ICE 의 클 라 우 드 컴 퓨 팅 솔 루 션 입 니 다.이 는 각종 서비스 단 을 여러 대의 기계 에 배치 하고 클 라 이언 트 호출 에 서비스 포 지 셔 닝,서비스 활성화,부하 균형,고장 이전 등 서 비 스 를 제공 할 수 있다.클 라 이언 트 는 지정 한 서비스 등록 센터 에 연결 하면 서비스 이름(여 기 는 Simple Printer)과 연결 프로 토 콜(Endpoints,여 기 는 tcp)에 따라 해당 하 는 서 비 스 를 찾 을 수 있 습 니 다.서 비 스 는 등록 할 때 도 실행 상태 에 있 을 필요 가 없 으 며,icegrid 에서 호출 요청 에 따라 자동 으로 시작 할 수 있 습 니 다.
등록 센터 설정
registry.cfg(서비스 등록 센터 설정 파일)
IceGrid.InstanceName=SzcIceGrid
#
IceGrid.Registry.Client.Endpoints=tcp -p 4061
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
# ,
IceGrid.Registry.Data=/home/rocway/test/zerocice/registry
IceGrid.Registry.DynamicRegistration=1
Ice.Admin.InstanceName=AdminInstance
Ice.Admin.ServerId=Admin
메모:파일 의 경 로 를 수 동 으로 만 듭 니 다.노드 설정
노드 는 서비스 가 있 는 기계 이다.실제 생산 환경 에서 서비스 등록 센터 도 그 중의 특정한 노드 에서 운행 할 수 있다.
node 1.cfg(서비스 가 있 는 노드 의 프로필)
#
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
#node
IceGrid.Node.Name=node1
IceGrid.Node.Endpoints=tcp
#node
IceGrid.Node.Data=/home/rocway/test/zerocice/nodes/node1
IceGrid.Node.Output=/home/rocway/test/zerocice/nodes/node1
IceGrid.Node.CollocateRegistry=0
메모:위 파일 에서 언급 한 경 로 를 수 동 으로 만 듭 니 다.이 중 서버 프로그램의 출력 은 Ouput 가 가리 키 는 경로 의*.out 파일 에 저 장 됩 니 다.응용 설명 파일
『8195』응용 설명 파일 은 서버 프로그램 이 icegrid 에서 의 배치 상황 을 설명 하 는 데 사 용 됩 니 다.응용 이름,서비스 프로그램의 경로,실행 매개 변수 등 을 포함한다.
app.xml
<icegrid>
<application name="PrinterApplication">
<node name="node1">
<server id="PrinterServer" exe="python" activation="on-demand">
<adapter name="PrinterAdapter" endpoints="tcp -h 127.0.0.1">
<object identity="SimplePrinter" type="::Demo::Printer" property="Identity"/>
</adapter>
<option>/home/rocway/test/zerocice/Server.py</option>
<property name="Ice.Trace.Network" value="1"/>
<properties>
<property name="Ice.ThreadPool.Server.SizeMax" value="1" />
</properties>
<property name="IceMX.Metrics.Debug.GroupBy" value="id"/>
<property name="IceMX.Metrics.Debug.Disabled" value="1"/>
<property name="IceMX.Metrics.ByParent.GroupBy" value="parent"/>
<property name="IceMX.Metrics.ByParent.Disabled" value="1"/>
</server>
</node>
</application>
</icegrid>
icegrid 시작1.icegrid 등록 센터 시작
icegridregistry --Ice.Config=registry.cfg
2.노드 시작icegridnode --Ice.Config=node1.cfg
3.노드 에 있 는 응용 프로그램 을 시작 하고 응용 프로그램 을 추가 합 니 다.icegridadmin --Ice.Config=node1.cfg
application add app.xml
4.추 가 된 앱 보기application describe PrinterApplication
5.각 노드 의 응용 서비스 시작icegridgui
6.클 라 이언 트 프로그램 실행python Client.py
실험 총화이번 실험 은 icegrid 에 서비스 프로그램 을 배치 하고 클 라 이언 트 가 icegrid 의 서비스 등록 센터 를 통 해 이 서 비 스 를 호출 하 는 것 을 실현 했다.실험 에서 서버 와 클 라 이언 트 는 모두 Python 을 사 용 했 고 관심 이 있 는 학생 들 도 서로 다른 언어 로 서버 와 클 라 이언 트 를 개발 하여 Zeroc ICE 의 크로스 언어 RPC 호출 을 시도 할 수 있 습 니 다.
이번 실험 은 여기까지 입 니 다.Zeroc ICE 에 관 한 다른 내용 은 후속 과정 에 주목 하 시기 바 랍 니 다.
이상 은 python 으로 Zeroc Ice 애플 리 케 이 션 을 개발 하 는 방법 에 대한 상세 한 내용 입 니 다.python 이 Zeroc Ice 애플 리 케 이 션 을 개발 하 는 데 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.