结构与总体思路:
我们对外提供的是在线oj编译运行服务。那么在线自然通过实现web服务器在浏览器 实现功能(利用前端制作网页,对应web服务器的路由实现功能),后端自然需要提供编译运行服务。
为了更加灵活的控制后端的编译运行服务,我们可以将后端编译运行服务也设置为网络服务,这样的化我们可以利用不同的主机部署编译运行服务,web服务器(在线oj和前端交互的)后端可以负载均衡式的选择主机。(这样的话在未来存在很多人使用的情况下就可以不用导致一台主机压力过大而被干掉)题目来源题库,只需要web服务器根据路由选择提供题目列表或者单个题目信息了,题库的话设计版本有文件版本和mysql数据库版本。
这样的话我们的思路就被明确出来了。web服务器路由整合和前后端交互内容模块我们称之为oj_server模块,编译运行服务模块称为compiler_server模块。很明显,这就是一种bs模式(浏览器/服务器模式)。
技术如下:
1.C++STL(选择C++语言作为后端开发自然需要使用到里面的各种容器,比如string、vector)
2.cpp-httplib (http应用层通信我们使用第三方库快速解决,如果编写套接字接收会很麻烦)
3.jsoncpp (网络通信时重要的一点就是将一个待发送的信息转换为json串进行发送。为了简单完成序列化和反序列化)
4. Boost(C++准标准库内提供了一些好用的方法比如字符串切割spilt方法,能够快速帮助我们完成字符串切割为几个小块并且保存起来而不用自己编码实现)
5.MySQL C connect(当后端采用mysql数据库存储数据的时候,需要程序访问mysql数据库需要使用)
6.ctemplate (当想往网页html利用程序填充变量的时候,需要用到第三方渲染库,开源的前端渲染库)
7.ACE前端在线编辑器 (前端知识,让我们的oj代码编辑变得好看)
8.js/jquery/ajax (前端向后端发起http请求)
9.多进程多线程 (第三库中实现,本身代码没有体现)
10.负载均衡算法 (前端请求,后端根据编译服务主机的负载情况进行择少选择)