zeroc ice的全雙工通訊策略

2021-08-03 07:26:23 字數 2299 閱讀 4370

在專案中,往往很多時候涉及全雙工通訊要求,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 所謂半雙工就是指乙個時間段內只有乙個動作發生,舉個簡單例子,一條窄窄的馬路,同時只能有一輛車通過,當...