serverpush的简单介绍
关于IOS12 推送系统语音播报无声解决方案
自从iOS升级到12.0.1 突然发现推送语音播报没有了效果了,之前iOS12 完全没有影响;
如何实现(网上很多,基本方案就是UNNotificationServiceExtension+语音合成)
调试了一下NotificationServiceExtension 打了断点,发现AVSpeechSynthesizer 崩溃了,试了很多都以失败告终,
在网上查找资料无果,最后尝试使用第三方语音软件,最后成功了,折腾了我几天,最后希望能够帮助苦恼的童靴们;
这里需要注意一下细节:
我用的百度语音,这里你需要将百度语音的依赖包,添加到你的pushserver 的 link binary with libraries 里面!
最后大功告成!
数据实时推送怎么实现
这个最好不要通过数据库触发事件,建议在插入一条数据同时,再执行一条选择数据的语句。而且浏览器的刷新不建议间隔很短,毫秒级的刷新服务器压力较大,最好5s或这10s刷新,我想一般的监控需求都满足了,如果不能满足就改用客户端吧。
TCPServer如何解决Server端口ip变更
变更方法如下:
服务器采用netty的tcp协议作为client-server的通讯方式,tcp的好处是与客户端的连接为长连接,消息格式精简,传递比较快速,而且服务器可以发送push消息。但现在的问题是,公司的网络出口ip经常会变更,而tcp是根据ip+port来判断客户端连接的,因此随着ip的变化,该连接肯定失效了。
游戏会发生让玩家重新登陆的情况,这样的话,玩家是无法接受的,相当于无缘无故被踢出了游戏。
但是不少公司都是仅有几个出口ip,说明这种情况还是比较多见的,而且像qq等软件,用了tcp或者udp协议,也可以很好的适应这种环境,因此肯定有合适的解决方案。现在想到的一种办法是,每个tcp请求,都带有session信息,可以用一个64位的标志id的字节来存储,这样对协议增加的网络流量是微乎其微的,服务器需要对每个请求sessionId进行处理,判断是否有效,如果有效的话可以直接跟服务器通讯,无效的话需要重新登陆,获取新的sessionId。
另外一个重要问题是,客户端的tcp连接是无法估计保障的,可能玩家会突然关闭浏览器,而不会给服务器发送close信息。如果服务器对每个客户端的连接建立一个对象的话,需要管理这个对象的生命周期,设置一个失效时间,例如30分钟,如果30分钟没有操作的话,就自动销毁,这样可以防止对象累计越来越多产生内存泄露的情况。