2016-09-15 更新: 加入 PDF 版本网络协议图
去年光棍节的时候,我写过一篇 quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket 。这篇文章介绍了我为何决定在项目中使用 LuaSocket 。
现在想起来,当时对 WebSocket 是很感兴趣的,但由于服务端的限制,最终依然选择了 LuaSocket。我后来对 LuaSocket 进行了封装,使其更好用。
现在,面对一个全新的项目,我自然而然地选择了 WebSocket。
因此,我需要了解下面这些问题:
- Socket 和 WebSocket 有哪些区别和联系?
- WebSocket 和 HTML5 是什么关系?
- 必须 …
这是一个 luasocket 范例。
为了便于使用,我封装了 luasocket 到
cc.net.SocketTCP类中。这个范例展示如何使用cc.net.SocketTCP。同时,在本范例中还使用了
cc.utils.ByteArray和cc.utils.ByteArrayVarint。要了解更多关于
cc.net.SocketTCP和cc.utils.ByteArray的信息,请阅读 一个LuaSocket封装 和 用lua实现ByteArray和ByteArrayVarint .在本范例的 net 包中,有3个 lua 类:
阅读更多2014-01-10更新: SocketTCP 已经进入 quick-cocos2d-x 的 framework.
在 [quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket][1] 一文中,我提到了选择 [LuaSocket][2] 与服务器通信。为了方便使用,我对LuaSocket进行了封装。封装主要做了这样几件事:
- 封装基于 LuaSocket 的 TCP 模式,使用 settimeout 实现异步调用;
- 利用 cocos2d-x 提供的定时器实现失败重连;
- 利用 quick-cocos2d-x 提供的 …
quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket
- 2013-11-17更新:加入SocketTCP和ByteArray类的实现链接。
- 2014-11-05更新:增加范例链接。
- 2014-12-04更新:一篇更详细的文章: Socket 与 WebSocket 。
在 quick-cocos2d-x 中,默认集成了 LuaSocket 和 WebSocket 两个 Socket 库。那么,在开发需要长连接的手机游戏时,应该选择哪个库呢?下面从几个方面进行比较:
- 跨平台;
- 易用性;
- 性能;
- 流量;
- 灵活性;
- 二进制编码;
- 服务器实现。
前戏
也许你会奇怪,既然AS提供了Socket实现,为什么还要用ANE来实现Socket连接?
在 在ANE插件中启动AIR开发的Android应用 一文的最后,我提到了一个应用案例,我现在将这个案例明确的说明一下。
对于游戏开发者来说,我们希望能推送给用户一些消息。如果使用常规的手段,只能在用户打开游戏的时候,才能和服务器通信,收到这些消息。
如果用户几天不上线,那么可能会错过这些消息,导致游戏中的公告、奖励不能及时到达。
要解决这个问题,我们可以在Android系统中注册一个Service。这个Service长期保持与服务器的连接,或者隔段时间连接一次服务器,收到消息后马上推送给用户。 …
阅读更多
2011-08-05升级:加入自定义数据发送的功能,规则:s字符串,b字节,i长整数,u无符号整形,n短整形。例如
:n1000,b1,i65555,s你懂的为了测试新服务器的连接承载能力,我花了点时间写了这个测试器,但其实这只能算个雏形而已。
后来测试器使用C#重写,所以这个测试器就没再修改和更新,里面已有的BUG也没怎么解决。
目前的版本实现了以下功能:
- 指定连接数量;
- 允许指定连接间隔时间;
- 发送指定大小的测试数据包;
- 自动写入log文件(不要妄想用TextArea显示Log,最后程序会直接被log信息的更新拖死……)
- 加入自定义数据发送的功能,规则:s字符串,b字节,i长整数,u无符号整形,n短整形。例如 …
SWF帧频(FPS)对Socket连接的影响
Adobe官方帮助中对于Flash Player的睡眠模式有 这样一段介绍 :
阅读更多ActionScript 代码在睡眠模式下继续执行,这与将 Stage.frameRate 属性设置为 4 fps 类似。但是跳过呈现步骤,因此用户看不到该 Player 正在以 4 fps 的速率运行。之所以将帧速率选择为 4 fps (而不是 0),是因为该速率允许所有连接保持打开状态(NetStream、Socket 和 NetConnection)。将帧速率切换到 0 fps 会断开打开的连接。之所以将刷新速率选择为 250 毫秒 (4 fps),是因为 …
转自:http://caihx.javaeye.com/blog/605143
套接字基础
1. 介绍
多数程序员,不管他们是否使用 Java语言进行编码,都不想知道很多关于不同计算机上的应用程序彼此间如何通信的低级细节。程序员们希望处理更容易理解的更高级抽象。Java程序员希望能用他们熟悉的 Java 构造,通过直观接口与对象交互。
套接字在两个领域中都存在 ―我们宁愿避开的低级细节和我们更愿处理的抽象层。本教程讨论的低级细节将只限于理解抽象应用程序所必须的部分。
阅读更多转自:http://blog.csdn.net/zsnlovewl/archive/2009/12/12/4991820.aspx
1、TCP连接
要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即 …
阅读更多