web服务器也是端系统么,Web服务器和游戏服务器的那些事儿

随便聊聊

我接触过的软件,最早定义为C/S(Client/Server)和B/S(Brower/Server),如今传统意义上的C/S程序已经很少了,其实App和网络游戏还归位这一类。但更多的是B/S程序,基于各种浏览器的各种……有些朋友一直在做客户端的种种,比如说APP、手游客户端或是Web前端,对服务器端的知识很茫然,其实不然,从基础代码结构来讲,现在的客户端也很丰富了,什么MVC、MVVM架构应用都已经很成熟了,本地存储也OK,如sqlite、file什么的,也写过很多与服务器端交互的代码。这篇简单聊聊Web服务器和游戏服务器。

网络&系统

服务器端,最重要的就是网络,网络这块知识,看完《Unix网络编程》就无敌了。从现实工作应用中来看,HTTP、TCP、UDP是应用最广泛的,还有一些特殊的协议。

操作系统层面,需要了解进程、线程,尤其线程方面,再具体到框架实现即可。当然想深深的学习下操作系统也是可以的。。

Web服务器

几乎绝大多数的Web应用都是基于Http的,有空可以看下RFC-2616。Java里有Servlet,Node.js和Scala和Clojure和Golang、Python什么的都有自己的Http封装,PHP里有apache和nginx的CGI,有了这些,就可以解决客户端和服务器端通讯的问题了,服务器端要做的事情很多时候和客户端要做的类似,做一些逻辑处理,做一些持久化操作(数据库),也可能会与外部接口打打交道,然后将结果扔给客户端,基本就大功告成。只是在大架构方面的确需要比客户端健壮些(也可能是我没见过大型游戏)。如果想入门Web服务器端开发,第一步就是学习Http,然后找一门你喜欢的语言,进行语法学习,HTTP库的学习,持久层的学习,基本就可上手了。简单聊一下语言,Java做Web其实很蛋疼,各种框架。。Node其实相对轻一些,不过也不太轻。。PHP呢,世界上最好的语言没有之一,其实我接触PHP是在5.4+的版本,语言&框架层面使用起来很方便,性能方面也还凑合,5.4-我就不想吐槽了。。Scala这种强类型&函数式很不错,预计再过2-3年国内会火。。

多聊一点的话,现在的WEB也有很多应用使用长连接的,基于Web Socket的居多吧,。还有就是现在大家都追求NIO、异步、queue等来处理并发,在很多架构上都游刃有余,有大名鼎鼎的Netty,JVM上有Typesafe的Akka,Node天生异步风,都不错。

游戏服务器

游戏服务器我接触的并不多,但是要比Web服务器端做起来有意思多了。游戏服务器的消息定义一般分为几类:

1、请求/响应 - 像HTTP

2、通知 - 客户端只是向服务器端发送命令,不需后续任何处理

3、推送 - 服务器端主动向客户端发送命令

游戏服务器端都是使用长连接,大多数都是基于TCP,也有对UDP包装的很不错的案例。具体协议方面就不扯了,我也没那么懂。从应用层面上,游戏服务器端是有状态的,所以架构方面不会像Web服务器一样可水平扩展,还有一点特殊的就是游戏线上的各种数据一般都在内存中存储,有一定机制去同步到物理硬盘,这种做法是因为游戏的操作太频繁,可能你在游戏中走一步,需要推送的消息就有无数。

入门的话,学习TCP、UDP,找几个技术框架,如Photon(C#)、Mina、Netty、Pomelo(Node.js),C++的不太了解,应该有很多很多的历史架构都是基于C++的,各家都是有自己的游戏引擎,也或者都是自己写的Socket。首先学习消息处理方面,这样在服务器端也是一样的套路,各种逻辑校验,持久化,消息返回。至于怎样的架构是好的,怎样的代码结构是好的,这个仁者见仁了,没事儿上Github溜达溜达,总有适合你的!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值