在專案中,往往很多時候涉及全雙工通訊要求,zeroc-ice樣例介紹很多非同步通訊的策略,
但我最近專案需求中,不僅是要全雙工通訊,還要求服務端需要明確每個客戶端及區別對待,
所以需要給每個客戶端做標記處理
1)ice定義
#pragma once
#include
module testice
;inte***ce clientachieve
;inte***ce serverachieve;};
2)介面實現:
在我的ice定義中
void addclient(::ice::identity ident, int ctype);是很關鍵的一項,該函式是有服務端實現,
客戶端鏈結及通告服務端**樣例
ice::objectadapterptr adapter = communicator()->createobjectadapter("");
ice::identity ident;
ident.name = iceutil::generateuuid();
m_struuid = ident.name;
ident.category = "";
clientachieveptr crtwoway = new clientachievei(this);
adapter->add(crtwoway, ident);
adapter->activate();
soneway->ice_getconnection()->setadapter(adapter);
soneway->addclient(ident,ctype);//通知服務端
而在服務端,我們將進行標記每個客戶端,示例**:
void serverachievei::addclient(const ::ice::identity& ident,const ::ice::int &ctype, const ::ice::current& current)
;現在我們展示服務端介面**示例:
class clientmanagethread;
class serverachievei : public testice::serverachieve;/
serverachievei::serverachievei(const ice::communicatorptr& communicator)
: _communicator(communicator)
;serverachievei::~serverachievei()
catch (...)
};void serverachievei::addclient(const ::ice::identity& ident, const ::ice::int &ctype,const ::ice::current& current)
;//客戶端呼叫該函式實現客戶端到服務端的資料傳送,soneway->setpvalue(devid,pid,val);
void serverachievei::setpvalue(::ice::long devid, ::ice::long pid, float val, const ::ice::current& )
;/cpp/
clientachievei::clientachievei(testiceclient* _client) : client(_client)
;clientachievei::~clientachievei()
;void clientachievei::pvaluechange(::ice::long devid
,::ice::long pid
, const ::testice::datetimei& itime
, ::ice::float val
, const ::ice::current&)
;3)實現呼叫示例:
在我的clientmanagethread類中,實現資料從服務端傳送各客戶端:
mutex_client.lock();
std::map::iterator itw = _clients.begin();
while(itw != _clients.end())
itw++;
}catch (...)
}mutex_client.unlock();
在客戶端呼叫與已很多zeroc-ice的demoo一致:
//testice::serverachieveprx soneway;
if(connect())
catch(...)
}
半雙工通訊和全雙工通訊的區別
對於點對點之間的通訊,按照訊息傳送的方向與時間關係,通訊方式可分為單工通訊 半雙工通訊及全雙工通訊三種。單工通訊 x communication 是指訊息只能單方向傳輸的工作方式。在單工通訊中,通訊的通道是單向的,傳送端與接收端也是固定的,即傳送端只能傳送資訊,不能接收資訊 接收端只能接收資訊,不能...
前端通訊 全雙工,半雙工,單工
單工 a和b說話,b只能聽a說 半雙工 參考對講機,a 能不能聽到我說話,over b 可以可以,over 全雙工 參考打 a 哎,老王啊!b 半雙工 half duplex 是一種傳送制式。使用同一根傳輸線既作接收又作傳送,資料可以在兩個方向上傳送,但通訊雙方不能同時收發資料,這種傳送方式就是半雙...
全雙工 半雙工 單工 通訊,同步和非同步(待續)
全雙工 full duplex 是指在傳送資料的同時也能夠接收資料,兩者同步進行,這好像我們平時打 一樣,說話的同時也能夠聽到對方的聲音。目前的網絡卡一般都支援全雙工。半雙工 half duplex 所謂半雙工就是指乙個時間段內只有乙個動作發生,舉個簡單例子,一條窄窄的馬路,同時只能有一輛車通過,當...