1. 程式人生 > >Java遊戲伺服器開發之十--訊息處理器INetworkConsumer

Java遊戲伺服器開發之十--訊息處理器INetworkConsumer

Java遊戲伺服器開發之十-訊息處理器INetworkConsumer
有了session我們就可以在任何地方向客戶端傳送資訊
寫好了session,可以寫一個對訊息的處理類(消費者)。


add
INetworkConsumer
NetworkConsumer
update
TcpMessageStringHandler


多加一個INetworkConsumer介面,裡面就一個方法consume
寫一個實現類NetworkConsumer,實現consume方法,然後將handle中的channelRead0中的內容拷貝過來。簡單實現下,在加個@Component註解。


在TcpMessageStringHandler中
注入
@Autowired
private INetworkConsumer consumer;
把channelRead0的內容改成consumer.consume(msg, ctx.channel());


看看具體的程式碼吧:“


INetworkConsumer

/*
 * Copyright (C), 2015-2018
 * FileName: INetworkConsumer
 * Author:   zhao
 * Date:     2018/6/23 21:06
 * Description: 網路訊息處理器
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改時間           版本號              描述
 */
package com.lizhaoblog.base.network.customer;

import io.netty.channel.Channel;

/**
 * 〈一句話功能簡述〉<br>
 * 〈網路訊息處理器〉
 *
 * @author zhao
 * @date 2018/6/23 21:06
 * @since 1.0.0
 */
public interface INetworkConsumer {
  /**
   * 執行具體的指令
   *
   * @param message message 客戶端傳送的訊息
   * @param channel channel 與客戶端連線的管道
   */
  void consume(String message, Channel channel);
}


NetworkConsumer

/*
 * Copyright (C), 2015-2018
 * FileName: INetworkConsumer
 * Author:   zhao
 * Date:     2018/6/23 21:06
 * Description: 網路訊息處理器
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改時間           版本號              描述
 */
package com.lizhaoblog.server.core.customer;

import com.lizhaoblog.base.network.customer.INetworkConsumer;
import com.lizhaoblog.base.session.SessionManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import io.netty.channel.Channel;

/**
 * 〈一句話功能簡述〉<br>
 * 〈網路訊息處理器,實現類〉
 *
 * @author zhao
 * @date 2018/6/23 21:09
 * @since 1.0.0
 */
@Component
public class NetworkConsumer implements INetworkConsumer {
  private static final Logger logger = LoggerFactory.getLogger(NetworkConsumer.class);

  @Override
  public void consume(String message, Channel channel) {
    logger.info("伺服器收到的資料內容:data=" + message);
    String result = "小李,我是伺服器,我收到你的資訊了。";
    SessionManager.getInstance().sendMessage(channel, result);
  }
}





後面就可以在NetworkConsumer實現路由的功能,將訊息轉到各自的處理中了

上面的程式碼在碼雲上 https://gitee.com/lizhaoandroid/JgServer
可以加qq群一起探討Java遊戲伺服器開發的相關知識 676231564

相關推薦

Java遊戲伺服器開發--訊息處理器INetworkConsumer

Java遊戲伺服器開發之十-訊息處理器INetworkConsumer 有了session我們就可以在任何地方向客戶端傳送資訊 寫好了session,可以寫一個對訊息的處理類(消費者)。 add INetworkConsumer NetworkConsumer update

Java遊戲伺服器開發一-- 將訊息分發給執行緒佇列執行及路由功能

新增的類有: com.lizhaoblog.base.concurrent.commond.ICommand com.lizhaoblog.base.concurrent.commond.IHandler com.lizhaoblog.base.concurrent.dict

Java遊戲伺服器開發五--使用StringMessage封裝訊息

之前我們的訊息都是直接通過使用String,然後通過netty的預設編解碼器StringDecoder、StringEncoder來進行傳輸,而我們需要的不僅僅是文字內容,還需要擴充套件一些其他的東西(訊息號、狀態碼之類的)。 訊息傳輸可以看看這篇遊戲中tcp訊息使用b

Java遊戲伺服器開發二--資料庫連線整合mybatis

應該比較讓人關心的還有一個就是資料儲存的問題了。   下面將會介紹連線資料庫的相關內容   使用的是mysql資料庫,框架中將使用mybatis   這裡介紹時假設各位都使用或者瞭解過mysql。     1.在pom中新增相關包  2.建立資料庫和表   3.建立

Java遊戲伺服器開發二--導航帖

Java遊戲伺服器開發之三--日誌 https://blog.csdn.net/cmqwan/article/details/80644339  Java遊戲伺服器開發之四--通訊框架netty https://blog.cs

java遊戲伺服器開發四--通訊框架netty

前言, 說明 引入netty的pom <!-- netty --> <dependency> <groupId>io.netty</groupId> <artifactId>nett

Java遊戲伺服器開發二十三--將xml-cfg和redis的配置內容加到properties中

Java遊戲伺服器開發之二十三–將xml-cfg和redis的配置內容加到properties中 之前將xml-cfg和redis的工具類都寫好了,但是裡面的引數都是寫在程式裡面的,這一篇的話就是講這2個的配置檔案寫到properties中,不需要編譯程式就可

java遊戲伺服器開發七--使用IServer控制服務的啟動與關閉

 之前我們啟動伺服器都是直接這麼寫的 Channel acceptorChannel = ServerChannelFactory.createAcceptorChannel() acceptorChannel.closeFuture().sync()  這樣子也沒辦法關閉,

java遊戲伺服器開發三--日誌

        日誌在一個系統中的重要性還是很大的,有時候專案部署到伺服器上,不可能使用斷點除錯的方式,只能從日誌檔案中查詢蛛絲馬跡。 這邊是使用的slf4j。         在pom檔案中新增slf4j <!-- 日誌包 --> <depe

Java遊戲伺服器成長路——2016隨筆總結

寫在開頭 Java遊戲伺服器成長之路的系列,已經很長時間沒寫了,不是不想寫,而是這一年,基本都是在忙別的了,今天特地擠出時間,對我的2016年,做一個不留遺憾的總結。 2016的事件 不知不覺,又到了春節搶票的時候了,這兩天除了盼著年終能發點獎金以外,

Java遊戲伺服器成長路——感悟篇

又是一個美好的週末啊,現在一到週末,早上就起得晚,下午困了又會睡一兩個小時,上班的時候,早上起來喝一杯咖啡,然後就能高效的工作一整天,然而到了週末人就懶散了,哈哈。 最近剛跳槽,到新公司已經幹了有兩週時間了,這兩週時間是過得比較充實的,因為這家新公司

java遊戲伺服器開發從0開始-基礎搭建

eclipse安裝maven這裡就不在書寫,網上有很多教程,可以自己查詢,當然你可以下載一個自帶maven的eclipse 新建Maven專案,pom.xml如下 <project xmlns="http://maven.apache.org/POM/4.0.0"

Go遊戲伺服器開發的一些思考():goroutine和coroutine

概要 go語言的特色之一就是goroutine。也就是go協程。由於協程這個東西在go語言之前,用到相對比較少,大家對協程的理解程度不一,或有偏差。比如本人剛接觸goroutine時,就對其比較畏懼,因為不知道它到底是如何運作的。因此有必要深入瞭解下什麼是協程

Go遊戲伺服器開發的一些思考(七):IO遊戲同步(三)

概要 在本系列的11章、14章中,討論了IO遊戲同步;並介紹了一種同步方式:每100ms傳送一次全量狀態包;介紹了作為抗網路波動的優化手段,使用UDP協議來發這個狀態包。 本章將深入討論,網路波動下的同步問題。 TC命令模擬網路環境 既然要討論壞的網

Go遊戲伺服器開發的一些思考(二五):Redis的Docker Swarm部署

痛點 在redis 4出來之前,redis哨兵、redis叢集 是無法通過簡單的方式支援Docker Swarm的。原因是Docker Swarm的NAT埠對映機制,會導致redis無法正確獲取宿主IP、埠。 在redis 4之後,官方通過在redis.co

Go遊戲伺服器開發的一些思考(二八):登入流程(一)

過程與不確定因素 帳號登入是一個跨多個服務程序的一段持續的互動過程。 如IO遊戲,會涉及到的遊戲伺服器有: 登入伺服器 資料庫伺服器 快取伺服器 中心伺服器(很多別名,如CenterServer、WorldServer;也可能是redis、etcd之類的

微信公眾平臺開發模板訊息(Java)

由於柳峰老師的新書還沒有出來,網上也沒有過多介紹基於Java語言的開發微信公眾平臺模板訊息的例子,因此有了本文。由於個人表達能力和程式設計能力有限,請多多包涵。本文僅介紹擁有模板訊息許可權的微信公眾賬號開發。 本文分為以下兩部分: 1.開發模板訊息SDK 2.構造模板訊息併

【iOS-Cocos2d遊戲開發八】解決滾屏背景/拼接地圖有黑邊(縫隙)/動畫播放出現毛邊以及禁止遊戲中自動鎖屏問題!【2011年12月18日補充】

原創,轉載務必在明顯處註明:轉載自 原文連結: http://www.himigame.com/iphone-cocos2d/507.html     本章節主要為大家介紹在遊戲開發過程中經常遇到的兩個問題;     1. 解決滾屏背景或拼接地圖有黑邊!      對於遊戲開

Cocos2D-x遊戲開發九:瓦塊地圖碰撞檢測

昨天我們有了精靈和背景,並且精靈可以跑動了,但是我們不能讓精靈無窮無盡地跑下去吧,於是今天我們要在地圖上新增一些障礙物了; 首先開啟精靈的TMX地圖,然後我們自定義一個32X32畫素的圖片新增到圖層中,然後設定此圖層的屬性為:“collidable” 值為“true”,下一

OneNET麒麟座應用開發:空氣質量數據監測站項目總結

device arr mpp mas 地址 實用 問題 volume 數據監測 大氣質量數據監測站用於測試空氣質量監測及數據采集,實現野外或者室內空氣質量的檢測。 1、項目概述 本項目是一個定制項目,要求采集大氣的壓力、溫度、濕度、PM25、位置等數據並上傳到指定的後臺服務