客戶端(Client)示例

2018-12-24 22:34 更新

客戶端初始化參數(shù):

#-------------------------------------
# 服務(wù)模塊--客戶端初始化參數(shù)
#-------------------------------------

# 客戶端配置列表,多個(gè)客戶端名稱間用'|'分隔,默認(rèn)為default
ymp.configs.serv.client.name_list=default

# 服務(wù)名稱, 默認(rèn)為default
ymp.configs.serv.client.default.name=default

# 遠(yuǎn)程主機(jī)IP地址, 默認(rèn)為0.0.0.0
ymp.configs.serv.client.default.host=0.0.0.0

# 遠(yuǎn)程主機(jī)端口號(hào), 默認(rèn)為8281
ymp.configs.serv.client.default.port=8281

# 編解碼字符集, 默認(rèn)為UTF-8
ymp.configs.serv.client.default.charset=UTF-8

# 緩沖區(qū)大小, 默認(rèn)為4096
ymp.configs.serv.client.default.buffer_size=4096

# 執(zhí)行線程池大小, 默認(rèn)為10
ymp.configs.serv.client.default.executor_count=10

# 連接超時(shí)時(shí)間(秒), 默認(rèn)為30
ymp.configs.serv.client.default.connection_timeout=30

# 心跳發(fā)送時(shí)間間隔(秒), 默認(rèn)為60
ymp.configs.serv.client.default.heartbeat_interval=60

# 自定義參數(shù), 可選
ymp.configs.serv.client.default.params.xxx=xxx

通過在監(jiān)聽器實(shí)現(xiàn)類聲明@Client注解來表示一個(gè)客戶端,該注解有如下參數(shù):

事件說明
name設(shè)置客戶端名稱,Serv框架將會(huì)根據(jù)該參數(shù)指定的名稱加載對(duì)應(yīng)的客戶端參數(shù)配置,默認(rèn)為default;
codec設(shè)置編解碼器,默認(rèn)為NioStringCodec;
implClass客戶端實(shí)現(xiàn)類,默認(rèn)為NioClient;
reconnectClass短線重連服務(wù)實(shí)現(xiàn)類,默認(rèn)為NONE;
hearbeatClass鏈路維護(hù)(心跳)服務(wù)實(shí)現(xiàn)類,默認(rèn)為NONE;

基于TCP協(xié)議的客戶端,需要繼承NioClientListener監(jiān)聽器類,支持監(jiān)聽如下事件:

事件說明
onSessionConnected客戶端成功接入服務(wù)端后觸發(fā)該事件;
onBeforeSessionClosed客戶端會(huì)話被關(guān)閉之前觸發(fā)該事件;
onAfterSessionClosed客戶端會(huì)話被關(guān)閉之后觸發(fā)該事件;
onMessageReceived收到服務(wù)端發(fā)送的消息時(shí)觸發(fā)該事件;
onExceptionCaught出現(xiàn)異常時(shí)觸發(fā)該事件;

基于UDP協(xié)議的客戶端,需要繼承NioUdpListener監(jiān)聽器類,支持監(jiān)聽如下事件:

事件說明
onSessionReady客戶端與服務(wù)端連接已建立并準(zhǔn)備就緒時(shí)觸發(fā)該事件;
onMessageReceived收到服務(wù)端發(fā)送的消息時(shí)觸發(fā)該事件;
onExceptionCaught出現(xiàn)異常時(shí)觸發(fā)該事件;
示例代碼
TCP客戶端
@Client(reconnectClass = DefaultReconnectService.class,
        hearbeatClass = DefaultHeartbeatService.class, codec = TextLineCodec.class)
public class TcpClient extends NioClientListener {

    @Override
    public void onSessionConnected(INioSession session) throws IOException {
        super.onSessionConnected(session);
        //
        session.send("Hello from client.");
    }

    @Override
    public void onMessageReceived(Object message, INioSession session) throws IOException {
        super.onMessageReceived(message, session);
        //
        System.out.println(session + "--->" + message);
    }

    @Override
    public void onExceptionCaught(Throwable e, INioSession session) throws IOException {
        System.out.println(session + "--->" + e.getMessage(), e);
    }
}
UDP客戶端
@Client(implClass = NioUdpClient.class, codec = TextLineCodec.class)
public class UdpClient extends NioUdpListener {

    public Object onSessionReady() throws IOException {
        return "Hello from client.";
    }

    public Object onMessageReceived(InetSocketAddress sourceAddr, Object message) throws IOException {
        System.out.println(sourceAddr + "--->" + message);
        return null;
    }

    public void onExceptionCaught(InetSocketAddress sourceAddr, Throwable e) throws IOException {
        System.out.println(sourceAddr + "--->" + e);
    }
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)