初学服务器

    最近一哥们打算和我做个应用,我负责服务器。我一直搞前端的,服务器当真不太清楚,只是略知一二。接下来,就是到处看资料,学习服务器相关的知识,什么多线程,数据库,网络,日志,异常处理等,需要学的东西太多了。


    数据库方面,本打算用mysql,研究了一段时间,最后选用了sql server。数据库与程序的交互,一般通过数据库提供商的接口,支持C++,C,java,PHP等很多种,也有支持ODBC,ADO的。关于ODBC和ADO,我的理解是对数据库接口的封装,对不同数据库,可以用标准(ODBC,ADO)的接口处理,而不依赖具体是哪儿数据库。我们选择了ADO,但是目前我对其使用掌握还不太好,之后进行研究。


    服务器很重要的一个性能就是并发,主要是使用多线程和多进程,线程较为轻量,数据共享方便,但是编写难度较高。而多进程开销大些,数据独立,通信较麻烦。到底如何选择线程和进程,这个和程序的设计有关,也和CPU的核心数有关,目前还不能进行有效的分析。不过,我有这样的一点想法:对于单核CPU,使用多线程,除了网络部分,其实主要功能是区分模块,几乎是独立运行的模块。实际上,这些独立模块可以独立成进程,各自运行。放在多核心CPU上,这样的模式依然成立,只是无法充分利用CPU,所以,将任务比较繁重的逻辑模块(当然也可能有别的模块/进程)用多线程处理,线程数为核心数,这样可以充分利用CPU。这样一来,模块独立了,不互相干扰,同时CPU得到充分利用,效率也最大化。在我目前这样的水平看来确实是这样的,不知道以后会有什么样的想法。考虑到水平问题,时间问题,在这个项目中,采用的是单进程多线程的设计,作为第一次服务器开发的一个试验吧。


    网络方面,我确实不是太清楚,也就知道一个TCP,http,socket,但是他们到底什么关系,完全两眼一抹黑。查阅了很多资料后,算是大概明白了:

    IP网络层协议,个人理解就是标识网络中的地址。

    TCP传输层协议,可靠传送数据的协议,传输数据流。

    应用层协议,传输层之上,解析传输层数据,用于应用的协议,如HTTP,FTP,当然可以自己定协议。

而socket是用于实现TCP/IP协议的一个库,简单地说就是把协议转成代码。

关于第三方库,主要是实现HTTP的,他们还分了重量和轻量级,我现在也不清楚是怎么得出来的。

为了检验所学,同时练练手,我选择了使用socket写自己的基于TCP网络处理模块,自己实现粘包、分包,长连接或者短连接,自定设计简单的应用层协议,而不是选择使用http。可能之后要做的就是看看http协议,然后尝试自己实现一下吧。


    说道这里,还要说的就是数据格式,在传输数据的时候,一般采用数据格式包括,json,xml,binary,protobuf。json用的更多一点,但是protobuf据说数据会压缩得很小,挺好用,之后会尝试。


    还想说的一点就是服务器的架构问题,或者说是设计吧。做之前也就是大概想了一下有哪些模块,随便画了简图。真的做起来的时候,才发现这样做对开发的指导太少了。开发过程中会不停地修改,特别是前面没有想到的,或者是更细节一点的东西,代码写得很纠结,不流畅,完全不是想象中的一气呵成。我觉得吧,设计的时候,还是必须从大到小,各个模块都想清楚了,使用工具软件,建好模型,把整个框架搭好了,这样才能真正高效,并且一气呵成地完成开发工作,至少不会开发像是便秘一样。

    

    就到此为止了,这个项目的有关情况,还是继续做记录~

本文出自 “山重水复” 博客,谢绝转载!

你可能感兴趣的:(多线程,数据库,感想,服务器开发)