页游手游服务器(一)c实现拓展lua网络
把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结。
整个实现的主体是lua脚本,lua实现主要缺少的两大块:
1网络部分
2数据库部分
这两部分必须通过c/c++做扩展
先来做net,主要是服务器net,和客户端net。
服务器发起连接的情况主要是用于和平台验证,上报之类的,还有服务间通信,接口如下:
_connect(ip, port, onconnect, onclose, timeout)
参数:
ip,地址
port 端口
onconnect 连接上的回调
onclose 关闭的回调
timeout 连接的客户端socket超时时间,超时会回调close
返回net对象
服务器net负责监听,收集客户端来的消息,接口如下:
_listen(ip, port, onconnect, onclose, timeout)
参数:
ip,地址
port 端口
onconnect 连接上的回调
onclose 关闭的回调
timeout 连接的客户端socket超时时间,超时会回调close
返回net对象
net对象方法:
net:receive(sep1,sep2,sep3,maxlen, onrec),设置接收条件
net:send(data)
net:close(),主动关闭连接
假定客户端和服务器的通信协议是:4字节表示长度len,后面len个字节表示真正的消息
服务器net典型使用方法
locla function onbody(net, data)
--data 是消息包,根据需要处理
net:receive(4, onhead)
end
local funciton onhead(net, data)
local len=string.from32(data)
--len是消息包的字节长度
net:receive(len, onbody)
end
local function onconnect(net, snet)
net:receive(4, onhead)
end
local function onclose(net, msg)
print("net closed", msg)
end
local snet=_listen("0.0.0.0", 80, onconnect, onclose, 60)
假定服务器给客户端发的消息包,协议如上
客户端典型使用如下:
locla function onbody(net, data)
--data 是消息包,根据需要处理
net:receive(4, onhead)
end
local function onconnect(net, snet)
net:receive(4, onhead)
end
local function onclose(net, msg)
print("net closed", msg)
end
local cnet=_connect("X.X.X.X", 8081, onconnect, onclose, 60)
net:send(#data)
net:send(data)
网络部分使用了libiop库,因为它的一些api不满足我的需求,稍作了修改,源码等哪天有空(等系列文章写完了再整理)整理下,测试通过了再上传。
net和sql都是给lua做拓展,精彩部分在lua,稍后
页游手游服务器(一)c实现拓展lua网络的更多相关文章
- 页游手游服务器(三)lua网络层
在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分: 1通信协议(消息的序列化和反序列化) rpc调用主要信息包括方法名,方法参数,设计的通信协 ...
- 页游手游服务器(五)sql缓存层
sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...
- 页游手游服务器(二)c支持mysql
上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下 ...
- Unity3D手游开发实践
<腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...
- (转)Unity3D手游开发实践
作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...
- distri.lua重写开源手游服务器框架Survive
Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑. 鉴于一般的手游对服务器端的压力不会太大,便将Survive用di ...
- SLG手游Java服务器的设计与开发——架构分析
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- SLG手游Java服务器的设计与开发——数据管理
文章版权归腾讯GAD所有,禁止匿名转载:禁止商业使用:禁止个人使用. 一.前言 上文介绍了我们的SLG手游的服务器架构设计以及网络通信部分,本文介绍数据管理部分,在数据存储方面,我选择了Mysql.M ...
- 手游包压缩技术引领手游行业实现app页游化
近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...
随机推荐
- 配置Linux系统实现dhcp功能
配置Linux系统实现dhcp功能 1.背景及原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用 ...
- vscode - 使用Settings进行同步扩展以及配置信息等
1. 创建token(记住要复制上面的token): https://github.com/settings/tokens. 2. 创建gist id https://gist.github.com/ ...
- 2、cas4.0 单点登录 之 cas-client
cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书已经做好了证书的准备工作.如今结合cas-server来配置单点登录: 一.安装cas服务端(cas-ser ...
- Ant Design Mobile 使用 rc-form
引入: import { createForm } from 'rc-form'; 步骤一:绑定 form // 将form表单的api绑定到props,便于调用 const EditHeaderWr ...
- 【Datasatge】使用Datastage装载数据时候,报错:Missing record delimiter “”,saw EOF instead
如题,报错截图如下: 根据以上警告信息我们可以清晰看出,是字段DEFAULT_FLAG出错了!于是我们找到对应的字段,结果一看,导出文件中DS表结构中该字段为DECIMAL(18,2),但是导出文件中 ...
- 安装Linux centos 时编辑选项
将第上一步选择编辑之后出来的文字修改为:>vmlinuz initrd=initrd.img linux dd quiet 这里注意了:网上很多文章都说这一步改成“>vmlinuz ini ...
- 调用iPhone的短信
不传递短信内容,可以调用下面的方法: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://4664 ...
- 代码设置UIButton文字、图片位置
假设有按钮rButton的 imageEdgeInsets和contentEdgeInsets可以设置按钮的标题和图片的位置,如下代码,设置标题居右 NSString * rBtnTitle = @& ...
- asp.net core mvc视频A:笔记2-2.接收数据
传参方式一:使用内置方法传递 运行结果 其他获取方法 Session对象在HttpContext中 启用Session 使用Session 运行演示 传参方式二:数据绑定 普通类型(string).自 ...
- Eclipse个最实用的快捷键
一个Eclipse骨灰级开发人员总结了他觉得最实用但又不太为人所知的快捷键组合.通过这些组合能够更加easy的浏览源码,使得总体的开发效率和质量得到提升. 1. ctrl+shift+r:打开 ...