`fw服务端非完整` 工程开发初期的工作

前面写到了一些关于cocos2dx在开发中的一些模块以及一些解决方法,那些都属于本人的个人简介和个人倾向的解决方案.最近这几天我完善了一下ui解析的部分,当然也只是抽出一点点时间去做的这件事情.我添加了一个测试模块,保证了前面编码的各个模块都通过,android上面也是测试通过的,这个大家可以放心.现在我要暂时搁置一下cocos2dx系列部分,着手解决服务端部分.

在之前,我想先说一下我写fw服务端的出发点,简单,够用.先解释一下这里,所谓简单,够用.就是能够满足对接前面写到的cocos2dx部分,能够做到协议数据接受后的处理,暂时我还没有考虑组播之类的事情,但是这个后面我会添加.着重点放在从数据的接受解析以及到服务的处理返回过程,中间会涉及到socket处理,任务调度之类.我先定下这个简单的要求就是为了限制自己的思维,使之不会很快的横向发展,至少在我满意的架构出来之前我不想过度的横向发展.好吧,就说这么多.

我选用c,c++接合lua开发,核心的模块我会在c++部分写,不适用tolua++之类的桥接工具,而是使用lua c api作为lvm桥接工具,到服务层的处理我会使用lua服务.这之间其实是一个蛮复杂的过程.现在先说这么多,以后会慢慢总结,慢慢沉淀.另外,我用cmake作为项目构建工具,接合subl和qtcreator开发.我想了很久,最终确定使用qtcreator,是因为对cmake的支持比较好,但是大部分时间我都不会用,可能只是作为一个debug工具而已.

项目的前期雏形我已经搭建出来了.

1 -- fw
2    -- fw-server
3       -- build  (cmake 内部构建模式)
4       -- dep   (项目依赖的第三方扩展,目前我只是提供了lua-5.3.0)
5       -- fw      (工程需要的c++模块封装,也可以认为是自己的库)
6       -- server (应用程序)
7    -- fw-web  (web部分)

下面使fw-server目录的cmake文件:

 1 cmake_minimum_required(VERSION 2.8)
 2 project(fw-server C CXX)
 3
 4 option(DEBUG_MODE "Debug or Release Mode?" ON)
 5
 6 if(DEBUG_MODE)
 7     set(CMAKE_BUILD_TYPE DEBUG)
 8 else(DEBUG_MODE)
 9     set(CMAKE_BUILD_TYPE RELEASE)
10 endif(DEBUG_MODE)
11
12 set(CMAKE_C_FLAGS_DEBUG "-g -Wall -DFW_DEBUG=1")
13 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
14 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -std=c99")
15 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -std=c++11 -Wno-deprecated-declarations -Wno-reorder")
16
17 add_subdirectory(dep)
18 add_subdirectory(fw)
19 add_subdirectory(server)

下面是dep下面的cmake文件:

1 option(BUILD_LUALIB "Build lua lib on or not?" ON)
2
3 if(BUILD_LUALIB)
4     add_subdirectory(lua-src)
5 endif(BUILD_LUALIB)

在此处,我提供了cmake开关,可以来控制工程编译时对依赖的控制.我现在只是添加了一个依赖lualib,所以可以看一下:

 1 set(LUA_SRC
 2     lua-5.3.0/src/lapi.c
 3     lua-5.3.0/src/lauxlib.c
 4     lua-5.3.0/src/lbaselib.c
 5     lua-5.3.0/src/lbitlib.c
 6     lua-5.3.0/src/lcode.c
 7     lua-5.3.0/src/lcorolib.c
 8     lua-5.3.0/src/lctype.c
 9     lua-5.3.0/src/ldblib.c
10     lua-5.3.0/src/ldebug.c
11     lua-5.3.0/src/ldo.c
12     lua-5.3.0/src/ldump.c
13     lua-5.3.0/src/lfunc.c
14     lua-5.3.0/src/lgc.c
15     lua-5.3.0/src/linit.c
16     lua-5.3.0/src/liolib.c
17     lua-5.3.0/src/llex.c
18     lua-5.3.0/src/lmathlib.c
19     lua-5.3.0/src/lmem.c
20     lua-5.3.0/src/loadlib.c
21     lua-5.3.0/src/lobject.c
22     lua-5.3.0/src/lopcodes.c
23     lua-5.3.0/src/loslib.c
24     lua-5.3.0/src/lparser.c
25     lua-5.3.0/src/lstate.c
26     lua-5.3.0/src/lstring.c
27     lua-5.3.0/src/lstrlib.c
28     lua-5.3.0/src/ltable.c
29     lua-5.3.0/src/ltablib.c
30     lua-5.3.0/src/ltm.c
31     lua-5.3.0/src/lundump.c
32     lua-5.3.0/src/lutf8lib.c
33     lua-5.3.0/src/lvm.c
34     lua-5.3.0/src/lzio.c
35 )
36
37 add_library(lua STATIC ${LUA_SRC})
38
39 set_target_properties(lua PROPERTIES
40     ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/deplib"
41     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/deplib"
42 )

我没有对依赖源码结构做任何调整,只是简单的提供了一个下载解压lua源码的脚本.

1 #!/bin/sh
2 curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
3 chmod a+x lua-5.3.0.tar.gz
4 tar zxf lua-5.3.0.tar.gz

fw模块我暂时没有做任何处理,所以cmake文件是空的,我只是简单提供server下的一个main.cc文件,下面是server下的cmake工程文件:

 1 set(BIN_NAME ${PROJECT_NAME})
 2 set(BIN_SRC
 3     main.cc
 4 )
 5
 6 include_directories(
 7     ${CMAKE_SOURCE_DIR}/dep/lua-src/lua-5.3.0/src
 8 )
 9
10 add_executable(${BIN_NAME} ${BIN_SRC})
11
12 target_link_libraries(${BIN_NAME}
13     lua
14 )
15
16 set_target_properties(${BIN_NAME} PROPERTIES
17     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
18 )

我讲gcc/g++搜索路径处理好了,链接到lua库,其他的并没有处理.然后就可以进入build目录执行cmake .. && make.这样项目前期就处理完了,下面要考虑一下如何去编码实现.

我会在后续的文章中继续更新这一系列的处理.

时间: 2024-09-30 00:05:03

`fw服务端非完整` 工程开发初期的工作的相关文章

游戏服务端pomelo完整安装配置过程

游戏服务端pomelo安装配置 一.安装环境 debian 7.0 amd64 二.安装需要的组件 1.安装nodejs 注:debian下nodejs没有相应的apt包,所以无法用apt-get安装,只能通过nodejs的源码包安装, 这里有比较全的其他系统环境下安装nodejs的方式https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager a.安装所需的组件,python g++ #apt-get i

使用bufferevent进行libevent服务端和客户端的开发

参考了网上的一些例子,实验了基于bufferevent的开发. 首先是服务端: #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <event.h> #include <event2/listener.h> #include <event

实战厕所在哪APP视频教程 react native服务端实战项目实战开发教程

一个很好且包含服务端的实战项目视频教程!学习本视频最后有Node基础! ------------------课程目录------------------ <react native 快速开发App>├reactnative厕所在哪源码.zip├<第八章 App阅读模块开发>│  ├8-1 阅读模块功能设计.avi│  ├8-10 列表使用listview组件.avi│  ├8-11 数据列表展示.avi│  ├8-12 完善详情页.avi│  ├8-2 五大模块创建和加载.avi│

webService服务端和客户端开发 简单实例

这几天一直在看webService相关的知识. webService是一个跨平台访问的第三方插件,方便易用,多平台使用. 开发中我们可能自己是服务端,提供webService接口给别人访问我们的系统:也有可能我们调用别人的webService接口去访问别人的系统(比如查询天气预报). 下面是服务端和客户端的开发,实际开发中我们只是其中一方. 服务端开发: ①创建一个服务类,运行main方法发布即可,服务端就开发完成了. package com.lijianbo.service; import j

vue服务端渲染 同构渲染

引言 自JavaScript诞生以来,前端技术发展非常迅速.移动端白屏优化是前端界面体验的一个重要优化方向,Web 前端诞生了 SSR .CSR.预渲染等技术. 十年前,几乎所有网站都使用 ASP.Java.PHP 这类做后端渲染,但后来随着 jQuery.Angular.React.Vue 等 JS 框架的崛起,开始转向了前端渲染.2014年起又兴起了同构渲染,号称是未来,集成了前后端渲染的优点,当真如此? 我们先明确三个概念: 后端渲染:后端渲染指传统的 ASP.Java 或 PHP 的渲染

Dubbo服务端/客户端demo

项目组采用分布式服务,线上有几十个应用,RPC调用完全依靠Dubbo.平时开发一直都是用其他人搭好的dubbo环境,最近自己抽空独立的搭建dubbo小demo,一个服务端,一个客户端. 服务端 服务端maven父工程 首先搭建一个maven父工程,引入dubbo和spring的依赖,dubbo可以和spring无缝集成. <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding

DatagramSocket客户端与服务端Java实例

1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 public class TimeClient_UDP{ 7 public static void main(String args[]) throws IOException{ 8 String host = "localhost&

Bmob云服务端的学习

首先我先说下什么叫Bmob  ,我理解为他可以是移动云服务端加数据库.开发小游戏用这个很方便.可以实现用户的登入注册,聊天,计分.非常好用的一个东西 这里是他的官网,他是免费的 http://www.bmob.cn/site/sdk  : 进入这个网站之后,我们需要注册一个他的账号, 然后创建一个应用,  然后下载对应的SDK,记住他给的这个Application ID ,非常重要的. 因为我们需要的C#sdk在U3D里面,所以我们把他下载下来,下载完之后我们解压下,把他这个库文件导入到U3D里

http的post方式连接服务器,发送数据到服务端,并获取服务端的数据

大概的流程是:客户端填写了用户名和密码,在服务端进行判断,验证密码如果正确,则返回登录成功,如果密码错误,则返回登录失败 客户端是java程序,具体代码如下: package lgx.java.test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Unsupport