H5踩坑


以下C++相关的都废了,老板终于决定废掉原来的服务器用C#重写了

  • Web Socket与C++ 原生Socket通信实现

MDZZ
Web Socket的C++实现采用开源库Web Socket++(还有一个beast.websocket,蛋四这个的参考资料比较少)
这个库基于Boost.asio,需要先配置boost,配置过程中的error:
Error:c4996 unsafe ,
无法解析的外部符号 "class boost::system::error_categorye
-D_SCL_SECURE_NO_WARNINGS: Properties->C/C++->Command Line->add option复制
无法解析的xxx__imp__ntohs@4 referenced in function xxx: #pragma comment(lib,"WS2_32.lib")
to_string is not a member of std:
MinGW官网上那个getMinGW安装的g++(5.3.0)对于c++11中的一部分在源码中没有实现,win上可以使用MinGW-w64的安装包,除了获取新版本的g++外,还可以选择x86_64,即64位g++程序,目前版本为4.5,g++版本更新到 6.2.0

Websocket++提供了多种config,其中config::core仅需要stl,编译环境仅依赖C++11,蛋四没有什么文档,好像是没有实现网络功能,总之不会用,大多采用config::asio,这套方案直接实现了网络功能,蛋四需要boost::asio,也就是需要先编一份boost出来

整个流程有两种思路:
1.h5客户端连接到AgentServer转发服务器,在转发服务器上维护客户端列表,Agent和Tcp服务器之间保持一个socket连接,转发服务器将每条消息标识来源ID转发给TcpSrv,TcpSrv处理之后标识接收者ID发送给Agent,由Agent再发送给对应的客户端
2.client连接到Agent之后Agent发起一个到Tcp的连接,客户端列表要存两份,Agent这里要存一个tcpClient-wsClient的map
打算先用第一种

原生Socket

先插个书签
所谓的事件绑定和回调,本质还是一个(独立线程中)while(true)嵌套for循环,每一次循环依次检查每一个连接上recv是否大于0来判断是否收到来自某个连接的数据

OVER


  • 关于自动重连

  • 自动重连主要是基于客户端发起的(网络不稳定,断网之类的)
  • 因为完成端口对断网的检测(特别是ios端)存在延迟,很多时候需要客户端和服务器之间互发心跳包以确保连接
  • 为了保证用户体验,客户端尽量采用静默自动重连(可以转菊花但尽量少弹框)
  • tcp的connect建立是很快的,如果connect之后立刻开始收发数据,网络极度不稳定的话可能会丢包?,解决方案是让网络线程connect之后休眠一小段时间.
  • 每一次重连(重启网络线程)之间应该有个间隔时间(比如2s),期间客户端转菊花,但上一次连接(失败)2s后才会尝试再次连接,因为在网络不稳定的情况下(比如刚刚打开wifi开关)即使连100次也是很快就全部失败了
  • 注意客户端重连函数可能由不同的定时器触发(连接失败或是心跳包之类的),因此标志是否正在重连是很有必要的,如果执行重连函数的时候正在重连,一定不能再次执行重连,否则会造成无限连接失败进而卡死(ui都会死的那种)

客户端部分使用Cocos Creator

JS脚本之类的
js里函数和变量本质上是一样的,声明都是var something = somethingElse
js中没有类和命名空间的概念,在creator中
var MyClass=cc.Class({ //使用这样的方式来定义一个,在cc.Class“命名空间”下
ctor:function(){} //构造函数,new的时候调用
})
var a=new MyClass(); //调用ctor
cc.Class({
extends:cc.Component, //组件脚本继承自cc.Component
properties:{}, //这里竟然支持get/set方法可怕
onLoad:function{}, //组件的初始化函数,类似于Unity脚本周期中的Awake?和Unity里一样,组件的初始化不要用new
start:function(){}, //onLoad之后调用,Unity start()函数
update:function{} //update函数,贴心的是新建脚本这个函数默认是被注释掉的,毕竟事件响应的实现方式比update里一串分支优雅的多
})


layaBox?

  • 删除脚本文件除了src里删掉,bin/js里也要手动删除,还有bin/index.html里的js加载
  • pivot是以像素为单位的,默认0,0即左上角
  • 另一个anchor是0~1的范围,但只适用于UI组件
  • sprite.cacheAsBitmap = true; 将多个对象缓存为静态图像,这样绘制一大堆东西只有一个drawcall?(看文档好像并不是
  • loader.load([asset path],Handler.create(this,func,[args]) 给资源加载添加完成回调,如果加载失败会在控制台输出
  • 注意由IDE搭建的UI类或是UI扩展类的初始化要放在加载完成的回调函数里,否则会产生找不到资源的错误(因为被打到了图集里,res下并没有直接的对应路径)
  • 资源路径的根目录是bin,也就是说加载路径是"res/xxx/xxx.xx"
  • asset path可以是数组形式,加载一堆图集
  • stage/gameObject.on/off([eventType],[caller],[function])来启用/关闭事件捕获
  • Laya.Tween.to/from,缓动属性(组),还可以添加补间样式、回调和延迟执行时间,好屌哦
  • Laya.timer.loop/once 定时器,timer.clear 停止执行
  • Laya.Stat是那个显示帧率之类的状态框...
  • UI层级面板优化
    Unity有合并batch的概念,相邻的UI组件纹理如果使用同一图集可以一起渲染,Layer也有这种用法,而且更直观诶,用颜色标记不同图集,调整标记颜色相同的组件到一起,如图


    合并前
    合并前

    合并后
    合并后
  • F12发布UI项目,图片放在asset目录的子目录下

TypeScript

import [name =] namespace;js里是var name = namespace;
变量声明及初始化 var name:Type = new Type(args);
类函数声明 funName(args):return type{},不需要加关键字function

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容