第四章:使用Proxy代理让客户端服务端分工合作。
<基于1.8 Forge的Minecraft mod制作经验分享>
别被那个Proxy代理吓到,很简单的。
我们先讨论为什么要用Proxy代理:
像打开新的UI这种操作,比如打开一个背包,每个玩家都有各自的背包,这个操作仅仅应该发生在客户端,服务端通常是不做图形上的操作的。而像发送一个消息广播之类的事件,则应该在服务端处理,客户端只负责接收。因此,我们有了区分当前运行的是客户端还是服务端的需求,以分别处理不同的事件。诚然,我们可以粗暴的每次用if来判定,但这样效率无疑是很低的。所以Proxy就派上用场了。
接下来讨论什么是Proxy,它是怎么解决上述问题的:
Proxy的含义就是双面代理,通过为不同的运行端实例化不同的类,来使得不同端执行不同操作。这两个面、即两个类,通常分别叫做ClientProxy和CommonProxy,这个实例通常这么申明:public static CommonProxy proxy,并且ClientProxy必须继承自CommonProxy,这样才能用clientProxy初始化proxy实例。但这里有个疑问,就是ClientProxy里的方法是否需要Override并且super父类CommonProxy的方法。不过现在貌似没遇到过问题,那就先往后走吧。
好,现在上代码,看看实际中Proxy的用法:
@SidedProxy(clientSide = "com.zhengxiaoyao0716.douromod.ClientProxy", serverSide = "com.zhengxiaoyao0716.douromod.CommonProxy")
public static CommonProxy proxy;上面代码的含义:@SideProxy注释是用来标识代理器的,对下面的proxy实例加上了这个标识后,Forge开始时就会自动根据clientSide、serverSide指定的类(是的,要写上完整的包路径)来为其做不同的初始化。所以请注意:1、proxy不可为final(否则你让人家怎么初始化)2、不需要再手动将其初始化。
接下来的使用就很简单了,你可以把proxy当成一个接口,放心大胆的在其上调用方法,执行时会自动调用ClientProxy或CommonProxy类里面的方法。也不知道我说明白没有
老规矩Github:https://github.com/zhengxiaoyao0716/DouroMod,快来一起做啊!!!好吧我承认我写那么认真就是为了如果有一天我弃坑了,能有好心人把斗罗大坑填上。之前在贴吧里面遇到了一个曾经挖过这个坑的前辈,感慨良多啊
第四章:使用Proxy代理让客户端服务端分工合作。的更多相关文章
- nginx&http 第四章 ngx http代理 && 转载
Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream.连接上游服务器.向上游发送请求.接收上游响应(包头/包体).结束请求. upstream相关的两个重要数据结构ngx_http_ ...
- nginx&http 第四章 ngx http代理 upstream流程图
- 第四章 SSL和Proxy高级选项
在前一章,我们已经学习了HTTP消息如何通过Burp Proxy进行拦截和处理,本章我们将继续学习HTTPS协议消息的拦截和处理. HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入 ...
- 第四章SignalR自托管主机
第四章SignalR自托管主机 SignalR服务器通常在IIS的Asp.Net应用程序上承载,但它也可以使用自托管库来作为自托管的主机来运行(就像控制台应用程序或Windows服务那样)与Signa ...
- (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...
- JAVA: httpclient 详细说明——第四章;
httpclient 具体解释--第一章. httpclient 具体解释--第二章: httpclient 具体解释--第三章: httpclient 具体解释--第四章: httpclient 具 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
- Python--Redis实战:第四章:数据安全与性能保障:第7节:非事务型流水线
之前章节首次介绍multi和exec的时候讨论过它们的”事务“性质:被multi和exec包裹的命令在执行时不会被其他客户端打扰.而使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行 ...
随机推荐
- Qt中QWidget加入到父类QWidget不能显示的问题
最近忙活了半天发现了一个不容易发现的问题,比如我有一个父类的自定义Widget,并且自己设置了Pattle,但这个时候我如果再在当前Widget内部加入自己的widget就不能正常显示,但是加QPus ...
- Redis学习 - 入门
业精于勤,荒于嬉:行成于思,毁于随 -- 韩愈·<进学解> 因为工作中需要用到Redis,所以最近抽点时间看了一下,现在将学习的内容整理一下. 一.简介 1.Redis是什么? R ...
- sql语句去除重复记录(多表连接的查询)
--处理表重复记录(查询和删除) /********************************************************************************** ...
- Python新手学习基础之数据结构-对数据结构的认知
什么是数据结构? 数据结构是指:相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 举个列子来理解这个数据结构: 数据可以比作是书本, 数据结构相当于书架,书存放在书架上, ...
- 一个关于多线程和DbHelper的问题
我的初衷是这样的:在多线程环境下,每个数据库编号对应一个DbHelper对象. 下面是代码,不知道这样写有什么问题. namespace TestDAL { public class DB { pri ...
- ViewPage和ActionBar打造滑动视图
滑动效果非常流畅,可以将页签放置到ActionBar上,点击页签可以切换ViewPage,滑动ViewPage会同步更显Tabs. main.xml <?xml version="1. ...
- Quantization Method
如上一篇Quantization所说,可以在编码端通过设置offset来调整量化后的值,从而趋向于期望的量化值,而且在逆量化公式可以看出offset值在逆量化的时候是不会用到的. 目前来说,确定off ...
- Android自定义ActionBar
Android 3.0及以上已经有了ActionBar的API,可以通过引入support package在3.0以下的平台引用这些API,但这儿呢,完全自定义一个ActionBar,不用引入额外ja ...
- centos7安装VLC播放器
centos7安装VLC播放器 1.安装eple 下载地址:https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noar ...
- POJ1942 Paths on a Grid(组合)
题目链接. 分析: #include <cstdio> #include <iostream> #include <map> #include <cstrin ...