文档章节

Web服务器和游戏服务器的那些事儿

yaoqiangshmily
 yaoqiangshmily
发布于 2015/08/16 21:23
字数 1179
阅读 76
收藏 1

   随便聊聊

我接触过的软件,最早定义为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溜达溜达,总有适合你的!

 

© 著作权归作者所有

共有 人打赏支持
yaoqiangshmily
粉丝 0
博文 1
码字总数 1179
作品 0
东城
用 Python 快速实现 HTTP 和 FTP 服务器

用 Python 快速实现 HTTP 和 FTP 服务器 运维派2018-01-071 阅读 PythonftpHTTP服务器python 用 Python 快速实现 HTTP 服务器 有时你需临时搭建一个简单的 Web Server,但你又不想去安 […]...

运维派
01/07
0
0
分布式系统的那些事儿(一)

巨石应用在如今互联网+时代逐渐淘汰,而分布式系统,集群,微服务可谓现在的流行趋势。那么近期花点时间来讲讲分布式系统吧。 什么是分布式系统,很多人一直不理解,只知道把系统分布式部署就...

风间影月
2017/05/18
0
0
密码学的那些事儿

密码密码学中的密码和我们日常生活中所说的密码不太一样,计算机术语『密码』是一种用于加密或者解密的算法,而我们日常所使用的『密码』是一种口令,它是用于认证用途的一组文本字符串。这里...

linuxCool
2016/11/25
41
0
MVP那些事儿(1) 用场景说话

目录 MVP那些事儿(1)……用场景说话 MVP那些事儿(2)……MVC架构初探 MVP那些事儿(3)……在Android中使用MVC(上) MVP那些事儿(4)……在Android中使用MVC(下) MVP那些事儿(5)……中介者模式...

叫我丹尼尔
2017/12/02
0
0
Spring4.3+Webscket 实现聊天、消息推送详解原创之websocket与web服务器之间的那些纠结的事儿(二)

我曾经听到不少人说过一句话,如果浏览器支持html5,那么他就一定支持websocket,其实,这句话没毛病,就是觉得别扭,如果我们看我们最终的要结果来说,他只能占据一半,因为制约的另一半因素...

寒冰蓝血
2016/09/12
51
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
25分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
32分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
34分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
40分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部