设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1622|回复: 7
打印 上一主题 下一主题

[原创发布] SAE上搭建廉价的HTTP聊天室

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

跳转到指定楼层
1
发表于 2017-5-29 16:42:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 guoxiaomi 于 2017-5-29 16:52 编辑

最近为了实现VX的聊天功能,在SAE上搭建了HTTP服务器。大致说一下自己的构思吧:

1. 服务端部署用标准环境,租金 10 云豆 / 天,GIT 方式管理代码。但是SAE支持代码直接上传和在线编辑,所以就算不会用 GIT 也没有关系。

2. 客户端用了 6R 上不死鸟之翼的HTTP并发和英顺的马甲的免DLL输入法,细心的人应该能发现我在这两个帖子下面都留了言。

3. 客户端有 2 个操作: update 和 upload ,前者的参数是 $chat_index ,服务端收到后会返回最新的聊天记录。后者的参数是聊天信息,服务端收到后会提取参数里的内容,生成聊天记录保存下来,返回一个 done。

4. 服务端要用到 SAE 自带的这些功能:Memcached,KVDB,Storage。因为要用到 Memcached,所以每天有 3云豆的租金。从而每月纯挂机有 400 云豆的开销,也就是 4 块钱。

这些功能的介绍还是看看文档吧。简单的说,Memcached的数据是以 key-value 对的形式存储在内存里,而且有销毁时间;KVDB的数据是以 key-value 对的形式存在硬盘里;Storage的数据是以文件形式存在硬盘里,相比与KVDB,读取速度更慢,但是可以通过 FTP 直接管理。

服务端逻辑:
1. 首先在 KVDB 里保存一个变量 $chat_index,标记着当前聊天总数。这个也缓存在 Memcached 里方便读取。然后保存一个数组 $chat_ary,用来储存聊天信息。
2. 客户端上传聊天信息 $data 的时候,读取 $chat_index 并加一, 然后把聊天信息更新到 KVDB 里。 $chat_ary[$chat_index] = $data。
3. 客户端上传 update 信息的时候,比较数据里的 $chat_index 和 KVDB 里的 $chat_index,如果前者比较小比如是 9,而后者是 12,则从服务端返回 10,11,12 的聊天信息,以及新的 $chat_index = 12。
4. 当服务端的 $chat_index = 1000 的时候,将 KVDB 里的数组 $chat_ary 存储到 Storage 里,并且使 $chat_index = 0。
5. 对 3 的补充,如果比较数据里的 $chat_index 和 KVDB 里的 $chat_index,发现前者比后者还要大,比如前者是 120,后者是 12。说明客户端的 $chat_index 已经过期了,从服务端返回 0-12 的聊天记录。

简单的说就是这样,但是更多的问题比如,缓存优化、数据加密、身份验证、保存用户信息,这些暂时就不提了。

上面说的我已经做好了,暂时不把服务端代码、工程发上来,原因是我不太想直接就发布了,想听听各位的看法,比如要不要设置权限,或者开收费主题。还有一个原因是我不愿意把全部的代码拱手相让,毕竟研究这些花了不少时间。简单的聊天功能不仅仅是聊天,比如交易系统,本质上也是聊天。不过6月份一定会给出工程+服务端代码的~

关于网络,懂的人不细说,不懂的人喜欢瞎想,我发布这些东西出来,也是为了寻找有兴趣的人一同优化基于HTTP的适合RMXP/VX/VA的网络脚本。其实也没啥好优化的,主要是想找个程序员把免DLL输入法的bug解决了,以及把加密解密的函数写进 DLL 以提升速度。

选择用HTTP而不是 socket IP直连也是有原因的,论坛上网络化的帖子我全看过一遍,有一篇提过,RM系统做不了实时对战,因为不光网络有延迟,本地受到 Graphics.update 的影响,也有一个不小的延迟,所以数据是不可能“实时”处理的。所以索性不做实时的处理,如果只是做聊天、交易功能,或者是卡牌游戏等这些对延迟要求不高的应用,选择 HTTP 是合适的,而且成本比起租一个 VPS 要便宜得多。当然这只是我一个人的想法,因为我也没有租过 VPS,也不知道一个月多少钱。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
2
发表于 2017-5-29 17:28:51 | 只看该作者
设不设权限都防不住伸手党 要么直接开源了要么丢二进制吧
看到如此精打细算的同学 我就瞬间觉得我是土豪啊)划掉
聊天室也算是把RM玩出花样了
如果要持久化的话 自己的VPS上用MySQL之类的就好  不过我不太清楚SAE上有什么限制

点评

sae上的mysql每天有0.48元租金  发表于 2017-5-29 17:45
←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

梦石
0
星屑
3105
在线时间
741 小时
注册时间
2015-2-28
帖子
816

开拓者

3
发表于 2017-5-29 19:12:05 | 只看该作者
设权限感觉就有些鸡肋了……至于付费主题什么的,还是见仁见智了。想要别人帮忙解决bug的话不妨丢GitHub一份也方便些
不知道SAE有什么特性。VPS方面的话,我以前租的那台768mb内存单核,美西节点150左右延迟,价格每年12刀左右。如果想要个速度快的,是大学生的话,不妨关注一下阿里云和腾讯云的学生福利,进行学生认证后,每个月只要10rmb就可以获得一个速度不错的国内节点VPS。
器识为先,文艺其从。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2017-5-29 19:32:31 | 只看该作者
楼主测试的话可以考虑用微软的 Azure,在 Microsoft Imagine 上对学生免费

访问效果见 VA 区置顶的 F1 帮助文档预览

点评

VA 区置顶的 F1 帮助文档预览就是啊 @dearake  发表于 2017-5-30 08:09
啧Azure我也用过,就是感觉延迟略高,不过界面是蛮高大上的(大雾  发表于 2017-5-29 23:39
没有申请成功过 状元有弄好过么  发表于 2017-5-29 23:06
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-29 18:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表