我的游戏之路——服务器之IO篇
来源:互联网 发布:o2o在线预约商城源码 编辑:程序博客网 时间:2024/05/21 08:15
也算是考虑了很久的吧,从大学毕业做过网络的维护,写过CRM,OA这些企业后端,弄过网络爬虫,验证码识别。。。几个月前无意进入了游戏服务器开发领域,感觉打开了一扇新的大门。(这里应该有xxx感慨就略过了),主要原因就三个,一是我真的非常非常非常讨厌写前端的代码!!!虽然js,css,jquery,node.js这些东西或多或少都会吧,但是就是比别人写得丑,天生没有艺术细菌啊。二就是只有当做游戏时,才能体会到那种我就是上帝的感觉,这样的喜悦和玩游戏是完全不一样的,也就是成就感吧?三游戏服务器开发很时候我这样的懒人啊╮(╯▽╰)╭。
大致规划为:通信,交换(数据格式),数据(缓存,持久化),逻辑(游戏逻辑),安全,服务器设计几个部分。其中通信包含:IO,NIO,NIO2,NETTY,MINA。交换就是常用的三种交互格的使用:json,xml,以及基于二进制的protobuf。数据则是常见关系数据库和memcache,redis,mongpdb等。这些东西有空就写一点吧。
本着一贯懒人的特性,能直接上代码,就不BB了。
public class IOServer {public static void run(int port) {Socket socket = null;byte[] message = new byte[512];try {ServerSocket serversocket = new ServerSocket(port);//这里会阻塞socket = serversocket.accept();System.out.println("服务器启动!");//读取时候也会阻塞!InputStream in = socket.getInputStream();while(true) {int read = in.read(message);if(read >= 0) {System.out.println("服务器接收消息:" + new String(message, 0, read));}else {in.close();}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("socket关闭");}}public static void main(String[] args) {run(1234);}}
上面的代码就是使用传统的IO编写的服务器代码。流程很简单:
ServerSocket serversocket = new ServerSocket(port);//new一个ServerSocket,绑定一个端口socket = serversocket.accept();//阻塞监听,请求InputStream in = socket.getInputStream();//获取输入流(相应的也可以获取输出流)这里要说的是传统IO实现效率是非常低的,为什么呢?先看下面几个概念:同步:用户发送请求后(IO操作)等待或者轮询IO是否就绪。
异步:用户发送请求后,可以去干其它事。当IO完成时会得到完成的通知
这里可以看到同步异步是对于IO操作而言的(划重点)
阻塞:指调用请求后在结果返回之前,当前线程会被挂起,只有在得到结果后才返回。
非阻塞:在不能立刻得到结果之前,该调用不会阻塞当前线程。
很明显同步/异步,阻塞/非阻塞的区别点在于一个是IO,一个是线程的挂起。
而java传统IO,属于同步阻塞型IO。在accept(),获取输入流时都会阻塞极大影响了效率。而且默认单线程,当然也可以自己加入线程池。但这也意味这一个请求一个线程,对资源的消耗是非常大的。所以现在已经基本很少采用这种方式了
- 我的游戏之路——服务器之IO篇
- 我的游戏之路——服务器之NIO篇
- 软件,互联网,游戏——我的技术之路
- 我的IT生涯—仿真、游戏之路
- Java游戏服务器成长之路——感悟篇
- Java游戏服务器成长之路——感悟篇
- 我的游戏之路(1)
- 我的游戏之路(2)
- 我的游戏之路(3)
- 我的游戏之路(4)
- 我的游戏之路(5)
- 我的游戏之路(6)
- 我的游戏之路(7)
- 我的游戏之路(8)
- 我的游戏之路(9)
- 我的游戏程序员学习之路
- Java游戏服务器成长之路——弱联网游戏篇(源码分析)
- android游戏开发之我的小小游戏2——连连看游戏7优化
- 【hdu 1029】Ignatius and the Princess IV
- 大话数据结构 code第七章 02邻接表创建_CreateALGraph
- 处理海量数据的模式MapReduce,大规模数据集的并行运算
- Struts2——将字符串、对象、list集合保存到值栈中,在jsp页面中获取的方法
- 自己动手写C语言编译器(2)
- 我的游戏之路——服务器之IO篇
- Oracle性能优化读书笔记(2)-SQL语句和索引优化
- ExtJS 快速反入门指南
- jquery对象和DOM对象的相互转换
- 自己动手写C语言编译器(3)
- 免费馅饼
- Unknown run configuration type AndroidRunConfigurationType
- PHP isset()与empty()的使用区别详解
- 自己动手写C语言编译器(4)