cos

江娱互动「世界争霸」产品迁移至腾讯云云函数的实践

你。 提交于 2020-07-28 07:52:31
社交,是游戏玩家的一项基本需求,那么,在游戏中,成熟稳定的聊天系统担负着玩家交流的重要使命。 做为一家从不 996 的游戏创业公司,我们的两款产品《世界争霸》和《农场小镇》都在使用自研的聊天系统。随着在线人数逐渐增多,系统的稳定性和成本面临着更多的考验。于是,升级技术栈势在必行。 至此,核心目标已经出现,以保障性能为前提,同时做到省事和省钱。最终,腾讯云的云函数产品进入了我们的视线。 云函数,无需服务器,省去运维烦恼,只需要关注于业务逻辑代码,可谓省事。按量付费,用多少花多少,避免业务低谷期的资源浪费,可谓省钱。非常适合游戏聊天系统 API 这种复杂度低的中小型需求。 那么接下来我们关注的是,现有系统能不能无缝迁移过去,也就是云函数能不能满足目前所有的特定需求,我们一个一个来说。 第一个需求:少改代码 原来的 API 部分是采用 swoole 做为底层扩展,部署在腾讯云的 CVM 上,并使用腾讯云的负载均衡来接收外部请求。代码层面则是使用了 composer 进行包管理,一款开源的 easyswoole 框架做为 http 业务的架子。 换用云函数的方案的话,非代码层面就变成了腾讯云 API 网关加云函数来提供服务,而为了方便,依然需要继续使用 composer 进行包管理。原来基于 swoole 的 http 框架无法继续使用,改代码的重点就在这里。 首先就是逻辑入口

多快好省!原来还能这样搭建信息流社区?

微笑、不失礼 提交于 2020-07-28 04:10:28
「玩转腾讯云」 有奖征文活动正在如火如荼进行当中,不时有优秀的作品出现,本文是对其中一篇的摘录。当前热门的各大垂直类社区,feed流屡见不鲜,渐渐为用户所接纳,但是想要实现这样的社区功能却面临着诸多问题,本期将由云+社区专栏作者,腾讯高级后台开发netkiddy教大家基于腾讯云COS+CI+MPS等服务,解决社区功能中的图文音视频方案! 引言 从早期的门户网站,到后面的feeds流,再到如今的各种垂直行业的社区分享,一次次的变更成就了近几年行业中的领跑者。微博,手百、小红书、陌陌、B站等,都可以看到feeds流和社区的影子。其中的原始素材便是基础的图片、音频和视频等。 本文将主要介绍如何通过腾讯云下的对象存储COS,数据万象CI,视频处理MPS、CMQ和CDN等服务来一招解决社区功能中的图文音视频方案。 问题分析 在介绍方案之前,我们需要先进行分析:当我们需要做feeds和社区的时候,针对这些原始素材会遇到哪些典型的问题: 1. 类型兼容 从类型来看,在做当前的社区功能或者feeds流时,主要涉及到的还是在文本、图片、音频和视频这四类素材,当然在产品角度,这四类基本素材是可以相互结合的,如图文、多图、文本+视频等等组合形式。因此,我们需要对这些基本素材有支持存储、读取的功能等等。 2. 数据安全 从数据安全角度,素材分公有和私有,排列组合下来也就是需要有:公有读+公有写,公有读

如何判断一个点在旋转后的矩形中

≡放荡痞女 提交于 2020-07-27 22:29:24
前言 最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体。在此做个记录 如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体。显然这是不对的。 如果物体没有旋转,判断方法就很简单了。 static isPositionInRect(point: cc.Vec2, rect: cc.Rect) { return point.x <= rect.x + rect.width/2 && point.x >= rect.x - rect.width/2 && point.y <= rect.y + rect.height /2&& point.y >= rect.y - rect.height /2; } 我这个矩形锚点为为(0.5,0.5),如果锚点不是(0.5,0.5)可以自行修改。 但是判断一个点在旋转后的矩形中就没有这么简单了。 怎么判断呢? 首先我想到的是WebGL编程指南第92页讲到的内容。(x,y)在旋转O角度后得到(x2,y2) x2 = x * cos(O) - y * sin(O) y2 = x * sin(O) + y * cos(O) 得到了这个公式,我们接下来就是要旋转触摸点了。不过这个时候我们要确定要绕哪个点旋转,是坐标系的原点吗?不是的,而是我们要碰撞的矩形的中心点,因为矩形是绕这个点旋转的。

节约60%成本!虎牙直播云端大数据是怎么做到的?

五迷三道 提交于 2020-07-27 20:54:23
引言 ​ 虎牙是中国第一家上市的游戏直播公司,旗下产品包括知名游戏直播平台虎牙直播、风靡东南亚和南美的游戏直播平台NimoTV等,产品覆盖PC、Web、移动三端。其中,游戏直播平台虎牙直播月活达1.5亿。 如何借助于海量业务数据将全平台的优质内容与终端用户更智能、高效地连接起来,为公司运营和业务发展提供更为有效的数据能力支撑,是虎牙大数据团队(下面简称虎牙)过去和未来一直需要深入思考和探索的重要使命。为了达成以上愿景,虎牙选择与腾讯云EMR团队合作,接入大数据云端解决方案。 本文将通过案例解读,带大家深入了解虎牙云端大数据实践。 一、虎牙直播大数据分析场景 1. 背景介绍 虎牙是中国第一家上市的游戏直播公司,旗下产品包括知名游戏直播平台虎牙直播、风靡东南亚和南美的游戏直播平台NimoTV等,产品覆盖PC、Web、移动三端。其中,游戏直播平台虎牙直播月活达1.5亿。 2. 大数据场景介绍 意识到数据对于业务的重要价值,虎牙很早就成立了近百人的专业大数据团队,这个团队拥有业内卓越的数据技术能力和业务理解力,以应对海量数据的高效存储计算、算法构建、业务价值洞察等领域化工作。 经过多年的建设,该团队围绕数据在各个领域都取得了极为显著的进展,真正让数据成为优质内容与终端用户连接的催化剂。 虎牙大数据团队基于开放Hadoop技术栈快速构建了稳健的全平台大数据平台,以支撑近百P规模的离线

【LeetCode】56 电话号码的字母组合

|▌冷眼眸甩不掉的悲伤 提交于 2020-07-27 13:54:34
题目: 解题思路: 代码: package com.janeroad; import java.util.ArrayList; import java.util.List; /** * Created on 2020/7/12. * * [@author](https://my.oschina.net/arthor) LJN */ public class Test20 { public List<String> letterCombinations(String digits) { List<String> res = new ArrayList<>(); int len = digits.length(); if (len == 0) { return res; } String[] digitsMap = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; // 注意:设置 res 的初始值为 "" res.add(""); // 思路:新一轮在上一轮的基础末尾追加数字 for (int i = 0; i < len; i++) { // 得到当前的数字,注意:这个偏移是 '2' int num = digits.charAt(i) - '2'; String strList = digitsMap[num]

Zookeeper的ZAB协议

China☆狼群 提交于 2020-07-27 12:08:39
前言 Zab(Zookeeper Atomic Broadcast)是为ZooKeeper协设计的崩溃恢复原子广播协议,它保证zookeeper集群数据的一致性和命令的全局有序性。 概念介绍 在介绍zab协议之前首先要知道zookeeper相关的几个概念,才能更好的了解zab协议。 集群角色 Leader:同一时间集群中只允许有一个Leader,提供对客户端的读写功能,负责将数据同步至各个节点; Follower:提供对客户端读功能,写请求则转发给Leader处理,当Leader崩溃失联之后参与Leader选举; Observer:与Follower不同的是但不参与Leader选举。 服务状态 LOOKING:当节点认为群集中没有Leader,服务器会进入LOOKING状态,目的是为了查找或者选举Leader; FOLLOWING:follower角色; LEADING:leader角色; OBSERVING:observer角色; 可以知道Zookeeper是通过自身的状态来区分自己所属的角色,来执行自己应该的任务。 ZAB状态 Zookeeper还给ZAB定义的4种状态,反应Zookeeper从选举到对外提供服务的过程中的四个步骤。状态枚举定义: public enum ZabState { ELECTION, DISCOVERY, SYNCHRONIZATION,

基于 Serverless 与 Websocket 的聊天工具实现

假装没事ソ 提交于 2020-07-27 09:31:29
传统业务实现 Websocket 并不难,然而函数计算基本上都是事件驱动,不支持长链接操作。如果将函数计算与 API 网关结合,是否可以有 Websocket 的实现方案呢? API 网关触发器实现 Websocket WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工 (full-duplex) 通信,即允许服务器主动发送信息给客户端。WebSocket 在服务端有数据推送需求时,可以主动发送数据至客户端。而原有 HTTP 协议的服务端对于需推送的数据,仅能通过轮询或 long poll 的方式来让客户端获得。 由于云函数是无状态且以触发式运行,即在有事件到来时才会被触发。因此,为了实现 WebSocket,云函数 SCF 与 API 网关相结合,通过 API 网关承接及保持与客户端的连接。您可以认为云函数与 API 网关一起实现了服务端。当客户端有消息发出时,会先传递给 API 网关,再由 API 网关触发云函数执行。当服务端云函数要向客户端发送消息时,会先由云函数将消息 POST 到 API 网关的反向推送链接,再由 API 网关向客户端完成消息的推送。 具体的实现架构如下: 对于 WebSocket 的整个生命周期,主要由以下几个事件组成: 连接建立:客户端向服务端请求建立连接并完成连接建立; 数据上行

【LeetCode】47 交错字符串

与世无争的帅哥 提交于 2020-07-27 05:50:40
题目 解题思路: 思路:动态规划 暂时不是很懂 https://leetcode-cn.com/problems/interleaving-string/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-2-9/ 代码: import java.util.*; public class Solution { public boolean isInterleave(String s1, String s2, String s3) { if (s1.length() + s2.length() != s3.length()) { return false; } boolean[][] dp = new boolean[s1.length() + 1][s2.length() + 1]; for (int i = 0; i <= s1.length(); i++) { for (int j = 0; j <= s2.length(); j++) { if (i == 0 && j == 0) { dp[i][j] = true; } else if (i == 0) { dp[i][j] = dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(j - 1); } else if (j =

Mac重复文件查找工具哪款好用?Duplicate File Finder pro Mac版好用吗?

浪尽此生 提交于 2020-07-27 04:09:21
Mac重复文件查找工具哪款好用?Duplicate File Finder pro Mac版好用吗?File Finder pro Mac版是Mac平台上一款简单实用的重复文件查找工具,可以帮助你在Mac上删除不必要的重复文件, 图像,视频,音乐,文档,文件夹等 ,获得更多可用电脑磁盘空间。 File Finder pro Mac版功能介绍 快速查找任何磁盘,文件夹,存储上的重复项 检测重复的图片和类似的照片 查找重复和类似文件夹 从“废纸篓”中恢复已删除的重复项 合并文件夹并整理文件 从照片库中删除重复项 找到隐藏的重复项 使用智能清理提示 使用自动选择选项 查找任何类型文件的副本* 查看重复项的使用情况可视化 从搜索中跳过特定文件夹或文件类型 获得准确的字节到字节重复的结果 定义要搜索的重复文件大小 仅在特定文件夹中选择重复项 File Finder pro Mac版软件特色 1、扫描任何类型的磁盘驱动器和文件夹 选择要扫描的驱动器或文件夹。您可以指定文件扩展名类型,甚至是要扫描的文件的最小大小。只需不到一分钟的时间即可找到并显示重复的文件和文件夹 2、找到不需要的重复文件和文件夹 一起或按组预览重复文件,并选择不需要的副本。使用“ 自动选择” 按钮可以前所未有的快速完成任务,或使用“选择文件夹中的文件”选项指定要删除重复项的文件夹。 3、检测无用的相似照片组

通信原理的新认识-从实践到原理

两盒软妹~` 提交于 2020-07-27 02:04:44
在读书期间,本人是学习的通信专业,曾反复研读樊昌信老师写的《通信原理》这本书,一直停留在表面且没有新的理解,直到毕业之后从事通信相关的工作,才在实践层面对通信有了新认识。现就将新理解分享给小伙伴们,也把自己理解的通信流程讲述给小伙伴们。通信就是通过信道将信源的信息发送给信宿,换句热门的话来说,“端到端”就是手机之间如何通信,人的声音通过手机的麦克风转化为电信号,然后电信号经过手机的基带芯片变为基带信号,再通过手机的射频模块进行射频调制将射频信号发射出去,基站侧接收射频信号通过RRU(射频拉远单元)进行解调,通过光纤传输至BBU(基带处理单元),再到承载网,最后到核心网处理。这就是通信的全过程。下面通过图文的形式详细说一下这个过程。 人的声音通过手机的麦克风转化成模拟电信号,模拟电信号再通过信源编码变成离散的数字信号再进行传输,对于语音信号来说,常见的信源编码有PCM编码,AWB编码(VOLTE语音);对于视频信号而言,常见的信源编码有MP4、H.264、 H.265等,下面稍微提一下语音信号的PCM编码,这也就是樊昌信老师的《通信原理》中模拟信号的数字传输,其基本的流程是采样—>量化—>编码,最终变成离散的数字信号,具体的示意图如下: 离散的数字信号再通过信道编码进行传输,为什么要进行信道编码呢?基带信号在传输过程中易受到干扰和衰减,为了有效的抵抗信道中干扰和衰减