分类目录归档:教程

中国移动运营商网络问题的诊断和投诉

更新 1
由于切换到了 BGP 网络,服务器的 IP 地址已变更,请以新的 IP 地址为准,文章中的 IP 地址已经无法连通。
更新 2
切换到了 api.leancloud.cn 域名,我们用户的 DNS 问题已经大大的减少了。


偶尔会有开发者和用户反应在移动网络(4G/3G/EDGE)下,存在无法使用我们服务的情况,表现为应用加载数据失败,无法访问 https://cn.avoscloud.com 网站等。依我们的经验,这里的问题基本是由网络问题引起的,并且都是在中国移动的网络下,中国电和中国联通都没有遇到。这里写一下,如果出现这种情况,应该如何确定问题出在哪儿。请注意,以下的网络除无线网络是指 WiFi 网络外,均为中国移动的数据网络(iOS 里称蜂窝移动数据)和有线宽带网络(就是那个最近很便宜的,一天一块钱的宽带)。

对于开发者:请访问 https://status.avoscloud.com,确认我们各项服务的状态。
如果想确认数据是否正常,请登录 https://cn.avoscloud.com 的控制台查看。
如果都正常,请接着往下走,确认一下网络是否有异常。

对于用户:首先,如果是在无线网络条件下,请排除本地网络的问题,直接在设备(iOS/Android/Windows 或别的平台)上访问一下不太可能出问题的网站,如打开浏览器访问 www.baidu.com,看看能否成功。

排除本地网络问题后,请按以下方法诊断,需要先在设备上安装相应的检查应用
* iOS 用户推荐 iNetTools
* Android 用户推荐 LanDroid
* Windows Phone 用户请使用 Console WP8 Lite
* Windows 和 OS X 用户不需要额外的软件
* Linux 用户的话,应该也不需要看这个文章了,相信你直接可以搞定了

检查方法是 ping cn.avoscloud.com,如何操作呢?

iOS 用户 请打开打开 iNetTools,进入 Ping,输入 cn.avoscloud.com,然后点右上角的「启动」,然后会显示如下的信息,过十来秒后再点停止。
ios_nettools_merged_1

ios_nettools_merged_2

Android 用户 请打开 LanDroid,选择 Ping,输入 cn.avoscloud.com,点击「 Go」,并等待几秒钟。
android_landroid_ping_merged

Windows Phone 用户 请打开 Console WP8 Lite,输入 ping cn.avoscloud.com,这里可能会弹出一个 Application Error 的对话框,选择「 No」,等待几秒钟。
wp_console_merged

Windows 用户 请直接打开命令行(Windows 键 + R,弹出窗口后输入 cmd 后按「回车」,然后出来一个黑框就是了),输入 ping cn.avoscloud.com,然后「回车」,看返回结果。
winxp_ping_merged

OS X 用户 请打开终端(Command + 空格键,然后输入 Terminal 后「回车」,弹出一个白色窗口就是了,我这里有点例外,是配置成黑色),输入 ping -c 5 cn.avoscloud.com,然后「回车」,看返回结果
macos_ping_merged

运行完毕,来对比一下结果。参考上面各类中最后的一张图片,其中画有红框的是需要关注的。
* IP 地址,如果 IP 地址是在 117.78.13.64~67117.78.21.64~67,则是正常的,否则就是 DNS 解析出错
* 丢包率,即用百分比表示的,如果大于 3%,则表示网络质量会影响应用的使用(有个例外, 就是第一次 ping 测试,丢包率会高一些,即使是 10% 也是正常的,这种情况让 ping 测试测久一点即可恢复正常)
* ping 响应时间,100(单位默认为 ms)以下都是可以接受的,高于 100 ms 会感到缓慢

丢包率和 ping 响应时间,与网络质量相关,如果有运行迅雷或者 BT 下载程序,请限速或退出。如果以上都是正常的值,但是应用加载缓慢或仍打不开我们的官网,请与你的应用开发者联系,并将检查应用的结果截图提交给开发者。

如果 ping 中发现 IP 地址不对,则是 DNS 解析有问题,如何知道是哪个 DNS 服务器有问题呢?

iOS 用户 请安装 Dyn Dig,并在 domain name 输入 cn.avoscloud.com,并按「Search」进行查询
ios_dyndig_merged_2

以上是中国移动网络下, DNS 异常的截图。这种情况下只能向中国移动打 10086 电话投诉,告之受影响的域名及 DNS 服务器的 IP,才能解决问题。

如果是在无线网络情况下, DNS 异常,则请通过路由器的 DHCP 设置,将默认的 DNS 修改为正常的 DNS(推荐 114.114.114.114),并重启路由器即可。

Android/Windows Phone 用户 没有能查到 DNS 服务器 IP 地址的应用,跳过,如果哪位知道,请告诉我。

Windows/OS X/Linux 用户 请使用 dig 工具,参考上面的方法,执行如下的命令
dig cn.avoscloud.com 普通基于 UDP 的 DNS 查询
dig +tcp cn.avoscloud.com 使用基于 TCP 的 DNS 查询
dig cn.avoscloud.com @114.114.114.114 向 114.114.114.114 普通基于 UDP 的 DNS 查询
dig +tcp cn.avoscloud.com @114.114.114.114 向 114.114.114.114 使用基于 TCP 的 DNS 查询

dns_udp_failed_china_mobile_beijing

dns_tcp_success_china_mobile_beijing
以上是在中国移动光宽带的网络下 DNS 异常的截图。这种问题,也请投诉给中国移动。

通过以上诊断,如果是本地无线网络配置问题,请修复本地网络。如果问题出在运营商网络(3G/4G 或宽带),请打运营商客服电话。如果是运营商的 DNS 服务有异常,请直接投诉,参考文章末尾。

据我们了解,中国移动的网络质量本来就比较差,TD-SCDMA 的速度大家有目共睹的。除了数据网络外,宽带网络也是比较差的,它的宽带网络是以前的铁通网络。除去网络质量因素,中国移动网络还有一个比较大的问题,就是 DNS 服务器异常,这个不只是我们 cn.avoscloud.com 域名有受到影响。DNS 异常不只是 DNS 响应错误的 IP 地址,某些地区的中国移动还有个简单粗爆的域名检查系统,包含 av 字样的域名一率返回错误的 IP,嗯,我们很受伤。

这里顺便说一下,我们向中国移动投诉的经历,历时两周,向中国移动投诉多次,向工信部投诉两次,才解决了北京地区的 DNS 异常情况。据我们了解,江苏和香港地区也还有不同程度的异常。也请当地的用户,和我们一起投诉当地的运营商,人多力量大。

关于如何投诉

首先请先拨打 10086 向中国移动客服投诉,告之域名解析出错,请记客服同学记录下受影响的域名 cn.avoscloud.com 和异常的 DNS 服务器 IP 地址(见 Dyn dig 中的截图),48 小时后会有处理结果。提醒一下,这里处理的速度并不乐观,一般都没有结果。

投诉到中国移动后 48 小时问题仍未解决的话,依据中国相关法律法规规定,可以向工信部申诉,网址是 http://www.chinatcc.gov.cn:8080/cms/shensus/,这里最好是以邮件的方式申诉,将具体细节和截图写在邮件里发送给 accept@chinatcc.gov.cn,工信部的相关同学最早会在第 2 天回电话并催促中国移动。

申诉邮件的内容需要包括两个部分:
一是申诉者的姓名、身份证号码、通信地址、邮编、联系电话、申诉涉及到的电话号码、电子邮件、申诉日期
二是被申诉企业名称、申诉内容(详情)、是否向企业申诉过(一定要先向企业投诉,无效后工信部才能受理,直接找工信部的不受理),最后要承诺「我承诺申诉信息真实有的」

工单系统开源了

很高兴跟大家说,工单系统开源了。代码托管在了 Github 上。
如果还未见识过工单系统,请移步于 https://ticket.avosapps.com/
这个系统是用 AVOS Cloud 的 Javascript SDK 、云代码功能做的。

云代码可以干什么?

  • 实现客户端难以实现的业务逻辑。 比如将两个人配对,将等待用户的信息收集在云代码中,根据他们的地理位置等信息配对。类似短暂的信息就不用存入数据库了。类似的组织调配任务也比较适合在云代码中实现。
  • 定时任务。 比如定时请求教务处出成绩的页面,页面有变化、新出成绩的时候推送给相关的用户。
  • 给你的 App 搭建官方网站。 比如看电影学英语的应用,将一些精选视频片段放在网站上能更好地吸引用户。这时候,在云代码中访问数据就像在移动端一样便捷。
  • 当在移动端无从下手的时候,不妨站在服务端、云代码的角度思考问题。

可以从这个项目学到什么?

  • 涵盖了 JavaScript SDK 的大部分章节,涵盖了 对象查询Promise文件用户云代码函数 这些章节。
  • 更多的 best practice
  • 熟悉 Node.js、Express、HTML、CSS、JavaScript

也可以从工单系统中借鉴其中的好想法,

继续阅读

10 分钟为你的 App 加入实时通讯功能

很多开发者想在自己的 App 中添加实时通讯的功能,但通常因为没有合适的后端支持,最终没能实现。而 AVOSCloud 与时俱进,给大家带来了希望。下面就来介绍使用 AVOSCloud 给自己的 App 添加实时通讯功能。

AVOSCloud SDK 从 2.5.9 开始提供了实时通讯模块。本文主要基于 iOS SDK 2.6.2.1 实现,假设你已经具有一定的 iOS 开发基础,省略掉非实时通讯相关的代码,github 完整代码点此

概念

  • peerId
    唯一表示一个用户的标识,可以是用户名、用户 ID 或设备 ID 等等跟用户关联的东西
  • Session
    表示一个会话,处理底层网络连接,收发消息
  • Message
    消息,可以自己定义格式,如文本或 JSON 等,从而达到实现不同类型消息的目的
  • Signature
    签名,用于验证消息合法性
  • Group
    群组,一个用户集合的抽象,给一个群组发送消息,群组里面所有的人都将收到此消息

实现

此部分只列出了通讯相关的代码,省略了一些本地对话和消息保存的代码。完整代码可以查看 github 完整代码

继续阅读

基于 AVOS Cloud 的一对多、多对多数据建模

产品需求

demo (1)

假设有一个类似于 Instagram 的产品,核心的数据类型可能包括:用户(User),图片(Image),评论(Comment),点赞(Like)。他们之间的关系如下:

  • 对于每张图片(Image),有一个 publisher,是一个 User 对象的实例;
  • 每张图片,可能会有很多 Comment,每条 Comment 会包含一段文字说明和一个 Creator(也是一个 User 对象的实例);
  • 每张图片还会有很多人点赞(Like),我们可以根据图片找到所有点赞的人,也可以根据人找到他所有赞过的图片。

对于这样的模型,在 MySQL 中我们能很容易地通过主键、外键建立关联,但在 AVOS Cloud 里面如何表现出来呢?下面我会为大家仔细说明一下如何处理这种复杂的数据建模。

继续阅读

使用 Swift 和 LeanCloud 构建 iOS 应用

苹果在今年(2014)的 WWDC 大会上发布了一门新的开发语言 Swift。我们注意到很多开发者对 Swift 感兴趣,于是我们第一时间尝试了怎么用 LeanCloud SDK 和 Swift 构建 iOS 应用,并把方法告诉大家,方便使用 LeanCloud 服务的开发者能更快适应新的开发语言。

如果你还不知道 Swift 或者知之甚少,可以先看看苹果官方的介绍
The Swift Programming Language 或者 The Swift Programming Language (iBooks Store)

Swift 对于 iOS 的开发者来说,一个最重要的特点就是它完全兼容已有的 Objective-C 开发库,不论是系统已有的还是第三方提供的。下面介绍怎么在 Swift 工程中使用 LeanCloud SDK。

继续阅读

Swift 基础运算符

对任何一门高级编程语言,基础运算符都是不可或缺的。为了让更多开发者了解 Swift 的基础运算符,我们翻译了《The Swift Programming》的《Basic Operators》一章,如有错误,敬请指正。转载请在开始位置注明出处。

基础运算符

运算符 是一种可以检查、修改或结合数值的特殊符号或短语。例如,加法运算符可以将两个数字相加(let i = 1 + 2)。更复杂的例子还包括逻辑与运算符 &&if enteredDoorCode && passedRetinaScan)以及可以简化增量操作的运算符 ++i

Swift 支持大多数标准 C 运算符,并增强了避免常见编码错误的能力。赋值运算符(=)没有返回值,这可以防止误用(=)和等于符号(==)。算数运算符(+*)会检测且禁止数值溢出,避免因处理数据不当而导致的意外结果。你可以使用 Swift 的溢出运算符来自定义溢出行为,详情请参考 溢出运算符

继续阅读

Objective-C 开发者眼中的 Swift: 那些激动人心的新功能

swiftfeature

我们会在 blog 上持续地发布 Swift 相关的文章。AVOS Cloud 的 Swift SDK 也会很快推出,请大家关注。在转载本文时请务必保持完整性并在开头提供出处链接。

本文翻译自 http://www.raywenderlich.com/73997/swift-language-highlights

如果你和我一样,周一早上坐下来准备好好看看苹果的 Keynote,兴奋地准备开始尝试一些新的 API,结果你听到最多的是一门新的语言:Swift!你突然被告知,这不是 Objective-C 的扩展,而是一门完完全全新的语言。你是会激动呢,还是高兴,抑或头脑一片空白?

Swift 将会完全改变我们写 iOS 和 Mac 应用的方式,在这片文章里,我概括了这门语言的一些要点,并和 Objective-C 里面相应部分做了对比。

注意:这不是 Swift 的入门读物,苹果已经发布了一本很全面的 Swift Programming Language,我强烈建议你先读它。这篇文章只会讨论一些特别 cool、值得玩味的知识点。

继续阅读