RMI
ProudNet์ ์์ฒด ๊ฐ๋ฐ๋ Remote Method Invocation(RMI) ์์คํ ์ผ๋ก, ๊ธฐ์กด์ ํต์ฉ๋๋ IDL ํ์์ด๋ RMI ์์คํ ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ฐ๋ฉฐ ๊ฒ์ ๊ฐ๋ฐ์์๋ 'ํจ์ ํธ์ถ ๋ฆฌํด๊ฐ'์ ๋น๋๊ธฐ RMI๋ง ์ง์ํฉ๋๋ค.
RMI ํจ์ ๊ทธ๋ฃน
0๊ฐ ์ด์์ RMI ํจ์ ์งํฉ์ผ๋ก, PIDL ํ์ผ์์๋ global ๊ตฌ๋ฌธ ๋ธ๋ญ์ ํํ์ ๋๋ค.
global SimpleC2S
{
...;
}
Proxy์์ RMI ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ฆ์ ๋ฆฌํดํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ RMI ํจ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ Proxy ์ธก์์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฐ์ง๋ ๋ชปํฉ๋๋ค.
RMI ๋ฉ์๋ ์ธ์ ์์ฑ
๋ฉ์๋ ์ธ์์๋ ์์ฑ ์ ์๊ฐ ๋ค์ด๊ฐ๋ฉฐ ๊ฐ ํ๋ผ๋ฏธํฐ๋ง๋ค ํ ๊ฐ ์ด์ ์ธ ์ ์์ต๋๋ค.
// ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด RMI ๋ฉ์๋๋ฅผ ์ ์ธํ๋ฉด
Test([in] Proud::String a,[in] int b,[in] float c);
// ๋ค์๊ณผ ๊ฐ์ C++ code๊ฐ ์์ฑ๋ฉ๋๋ค.
Test(Proud::HostID remote, Proud::RmiContext& rmiContext, const Proud::String& a, const int& b, const float& c);
๋๋ถ๋ถ์ ๊ฒฝ์ฐ RMI ๋ฉ์๋์ ์ธ์์ ์์ฑ์ in ๋ง์ ์ฌ์ฉํฉ๋๋ค.
- byval ์์ฑ
์ธ์๊ฐ by value๋ก ์ ๋ฌ๋จ์ ์๋ฏธํ๋ฉฐ ์ด๊ฒ์ด ์ฌ์ฉ๋๋ฉด C++ proxy ๋ฐ stub์์ ์ธ์ ํ์์ & ๋ถํธ๊ฐ ์๋ต๋ฉ๋๋ค. int๋ float ๋ฑ ์ธ์ ํ์์ ํฌ๊ธฐ๊ฐ ์์ ํ์์ ์ ํฉํฉ๋๋ค.
// RMI ํจ์๋ฅผ ์ด๋ ๊ฒ ์ ์ธํ๋ฉด,
Foo([in] int a);
// ์์ฑ๋๋ C++ Proxy and Stub์๋ ํจ์ ํ๋ผ๋ฏธํฐ๊ฐ by reference๋ก ์ ๋ฌ๋ฉ๋๋ค.
// ์๋ const int& a๊ฐ ๊ทธ๊ฒ์
๋๋ค.
SimpleC2S.Foo = [](Proud::HostID from, Proud::RmiContext& rmiContext, const int& a) = { ... };
// RMI ํจ์๋ฅผ ์ด๋ ๊ฒ byval ์์ฑ์ ์ถ๊ฐํด์ ์ ์ธํ๋ฉด,
Foo([in, byval] int a);
// ์ด๋ ๊ฒ by value๋ก ํํ๋ก ๋ง๋ค์ด์ง๋๋ค.
SimpleC2S.Foo = [](Proud::HostID from, Proud::RmiContext& rmiContext, int a) = { ... };
- mutable ์์ฑ
์ธ์๊ฐ const type์ด ์๋์ ์๋ฏธํ๋ฉฐ ์ด๊ฒ์ด ์ฌ์ฉ๋๋ฉด C++ proxy ๋ฐ stub์์ ์ธ์ ํ์์ const ํค์๋๊ฐ ์๋ต๋ฉ๋๋ค. RMI stub์์ ๋ฐ์ ์ธ์์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ ํฉํฉ๋๋ค.
// ์ด๋ ๊ฒ mutable ์์ฑ์ ์ถ๊ฐํ์๋ฉด
Foo([in, mutable] int a);
// ์ด๋ ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. const๊ฐ ์ฌ๋ผ์ ธ ์์ ๊ฒ์
๋๋ค.
SimpleC2S.Foo = [](Proud::HostID from, Proud::RmiContext& rmiContext, int& a) = { ... };
์ด์ข
์ธ์ด๋ก ๋ ํ๋ก๊ทธ๋จ ๊ฐ ํต์ ํ๊ธฐ
๋ ํ๋ก๊ทธ๋จ์ด ProudNet์ผ๋ก ํต์ ํ๋ ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋ค๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ PIDL ์ปดํ์ผ๋ฌ๋ ๋ ๊ฐ ์ด์์ ์ธ์ด๋ก ๋ proxy์ stub์ ์์ฑํ ํ ๊ฐ ํ๋ก๊ทธ๋จ์ ํ์ํ ๊ฒ์ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋ฉ๋๋ค.
int, double, string ๋ฑ ๊ธฐ๋ณธ ํ์ ์ ๋ํด์๋ ProudNet์ C++ ์ธ์ ์ธ์ด๋ฅผ ์ํ ๋ํ ๋ชจ๋์์ ์ด๋ฏธ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ธ์ด๊ฐ ์๋ก ๋ค๋ฅด๋ฉด ์ด๋ฌํ ๊ธฐ๋ณธ ํ์ ์ ์ด๋ฆ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌ๋ผ์ง๊ธฐ ๋ง๋ จ์ ๋๋ค. ์๋ฅผ ๋ค์ด C# ์ ๋ฌธ์์ด ํด๋์ค๊ฐ System.String ์ธ๋ฐ, C++์์๋ std::string, std::wstring, ATL::CString, Proud::String์ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PIDL ์ปดํ์ผ๋ฌ๋ ์ฌ์ฉ์๊ฐ ์ํ ๊ฒฝ์ฐ ์์ฑ๋๋ proxy, stub์์ ๋ณ์ ํ์ ์ ํน์ ์ธ์ด์ ํํด์ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
์๋๋ ์ฌ์ฉ ์์ ๋๋ค.
rename cs(TypeA,TypeB); // 1
rename cpp(TypeC,TypeD); // 2
global XXX 2000
{
Foo([in]TypeA a); // 3
Goo([in]TypeC c); // 4
}
RMI ๋ฉ์์ง ๋ฒ์
๊ฐ RMI ํจ์ ์ ์ธ์ 1๊ฐ์ ๋ฉ์์ง ํ์ ์ ๊ฐ์ง๋๋ค. ProudNet์ ๋ฉ์์ง ํ์ ์ 6๋ง ์ดํ์ ๋ฒ์์์ ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ํ๋ฉฐ ์ด ๋ฒ์๋ ์ฌ์ฉ์๊ฐ .pidl ํ์ผ์ ์์ฑ์์ ํฉ๋๋ค.
1.7.42965-master ๋ฏธ๋ง์ ๋ฒ์ ์์๋ 1,300 ~ 60,000 ๋ฒ์์ ๊ฐ์ ์ฌ์ฉํ์ ์ผ ๋ฉ๋๋ค.
๊ฐ RMI์ ๋ฉ์์ง ํ์ ๊ฐ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค.
global SampleRMI 2000
{
Foo1(...); // Assigned Message Type ID = 2001
Foo2(...); // Assigned Message Type ID = 2002
Foo3(...); // Assigned Message Type ID = 2003
}
๊ฐ๊ฐ์ ํจ์๋ ๋ฉ์์ง ํ์ ๊ฐ์ด ํ๋์ฉ ์ฆ๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์ ์ธ๋ RMI ํจ์์ ๋ฐฐ์ ๋ ํ์ ๊ฐ๊น์ง๋ฅผ ๋ฉ์์ง ๋ฒ์๋ผ๊ณ ์นญํ๊ฒ ์ต๋๋ค. ์์ ์์์์ 2,000 ~ 2,003์ด SampleRMI๋ฅผ ์ํ ๋ฉ์์ง ๋ฒ์์ ๋๋ค.
์์ฑ๋ Proxy์ Stub์ Proud.CNetClient , Proud.CNetServer , Proud.CLanClient , Proud.CLanServer ์ attach ํ๋ฉด ๊ฐ RMI function group ๋ค์ ๋ฉ์์ง ๋ฒ์๊ฐ Proud.CNetClient , Proud.CNetServer , Proud.CLanClient , Proud.CLanServer ์ ์์ฝ๋ฉ๋๋ค.
๋ง์ฝ attach ํ proxy์ stub๋ค์ ๋ฉ์์ง ๋ฒ์๊ฐ ๊ฒน์น๋ ๊ฒ๋ค์ด ์์ผ๋ฉด AttachProxy() ๋ AttachStub() ์ exception์ ๋ฐ์์ํฌ ๊ฒ์ ๋๋ค.
ํ์ฉ
RMI ํ์ฉ๋ฒLast updated
Was this helpful?