webSocket

WebSocket概述

WebSocket是基于H5规范的,WebSocket 类用于发送和接收数据。 在 H5 规范中,定义了客户端和服务器通讯的 WebSocket 方式,在得到浏览器支持以后,WebSocket 将会取代 Comet成为服务器推送的方法。 目前 Chrome、Firefox、Opera、Safari 等主流版本均支持,Internet Explorer从10开始支持。 WebSocket 标准在很大程度上简化了复杂的双向网络沟通和连接管理。

下图显示了一个基于 WebSocket 的基本结构,在这种结构中,浏览器使用全双工的WebSocket连接,直接与远程主机通信:

Egret 的 WebSocket 即为 H5 的 WebSocket 封装。

用WebSocket进行通讯的基本过程

确保项目支持WebSocket

Egret 以官方扩展模块的形式支持 WebSocket。在现有的 Egret 项目中,修改 egretProperties.json 中的 modules 字段,在字段的最后添加 socket 模块:

 
 
  1. "name": "socket"

在项目所在目录内执行一次引擎编译:

 
 
  1. egret build -e

本步骤已经完成,现在项目中既可以使用WebSocket相关的API了。

WebSocket对象

所有的通讯都是基于一个WebSocket实例,首先创建WebSocket对象:

 
 
  1. var sock:egret.WebSocket = new egret.WebSocket();

侦听事件

WebSocket对象主要有两个事件,一个是连接服务器成功,另一个是收到服务器数据:

 
 
  1. sock.addEventListener( egret.ProgressEvent.SOCKET_DATA, onReceiveMessage, this );
  2. sock.addEventListener( egret.Event.CONNECT, onSocketOpen, this );

连接服务器

加入侦听事件后,即可连接服务器。注意像所有的通讯协议一样,服务器需要支持WebSocket协议,为便于测试,WebSocket官方提供了一个专用于测试的服务器echo.websocket.org,连接其80端口即可测试:

 
 
  1. sock.connect("echo.websocket.org", 80);

发送消息

连接成功后,即可发送消息,在前述的onSocketOpen处理函数中加入发送消息代码:

 
 
  1. var cmd = '{"cmd":"uzwan_login","gameId":"0","from":"guzwan","userId":"3565526"}';
  2. sock.writeUTF(cmd);

消息的具体格式都是根据情况自己定义的,通常是json格式,便于解析。当然可以自定义其他的字符串格式。

接收消息

服务器根据约定的格式返回消息,则会触发SOCKET_DATA事件,在其事件处理函数onReceiveMessage中即可读取消息:

 
 
  1. var msg = sock.readUTF();

读取到字符串后,即可根据约定的格式解析。

使用示例

将上一节所述的各部分用法连接起来:

 
 
  1. private webSocket:egret.WebSocket;
  2. private createGameScene():void {
  3. this.webSocket = new egret.WebSocket();
  4. this.webSocket.addEventListener(egret.ProgressEvent.SOCKET_DATA, this.onReceiveMessage, this);
  5. this.webSocket.addEventListener(egret.Event.CONNECT, this.onSocketOpen, this);
  6. this.webSocket.connect("echo.websocket.org", 80);
  7. }
  8. private onSocketOpen():void {
  9. var cmd = "Hello Egret WebSocket";
  10. console.log("连接成功,发送数据:" + cmd);
  11. this.webSocket.writeUTF(cmd);
  12. }
  13. private onReceiveMessage(e:egret.Event):void {
  14. var msg = this.webSocket.readUTF();
  15. console.log("收到数据:" + msg);
  16. }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值