Egret社区
本帖最后由 gamedaybyday 于 2017-4-19 15:13 编辑

一 Flash Air服务端

开发环境:flash build 4.6
开发语言:ActionScript3.0

我只会Flash的服务端,所以就用这个来做服务端了。- -

和websocket交互,对比普通socket,最主要多了2步:
1 握手协议 handshake (就是对暗号,你说一句天王盖地虎,我回一句宝塔镇河妖,咱俩才能通讯)
2 掩码处理 mask   (websocket收发数据是有特定规则的,这里的处理就是让socket模拟websocket的数据交互协议)
大部分人服务端连不通,就是没做这两步处理

握手和数据交互协议参考:
WebSocket数据报协议详解
http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html




二 Egret客户端
开发环境:
egret egine 2.5.2
egret wing 2.1.1

主要参考官网文档
http://edn.egret.com/cn/index.php/article/index/id/602


三 源码功能介绍
代码功能如下:
1 运行FlashAir服务端,等待客户端连接
2 运行Egret客户端,握手连接成功后,客户端会向服务端发送一条json数据
3 服务端接收数据后,进行掩码处理,读出数据。然后将该数据原样返回给客户端。

           请求连接
Client---------->Server

         握手成功
Client<----------Server

        发送一条json
Client----------->Server

        返回一条json
Client<-----------Server



四  源码运行步骤

1 首先运行Server.FlashAir文件夹下的,Main.exe,开启服务端,等待连接
默认IP:127.0.0.1,Port:8900
1.png

3.png

2 然后运行Client.Egret客户端,打开客户端。
2.png

3 输出结果

4.png

五 二进制

客户端
egret客户端发送,需要设置websocket类型,然后使用ByteArray发送数据
websocket.type = egret.WebSocket.BINARY;
var byteArray:egret.ByteArray = new egret.ByteArray();
byteArray.writeInt(123);
websocket.writeBytes(byteArray);
websocket.flush();

服务端
在服务端返回二进制数据时,客户端很多人收到长度为0,接收数据不是二进制等等问题。

这是因为服务端在发送数据时,没有按照websocket的数据交互协议来发。

我发现服务端处理二进制和字符串有点儿不同。。- -

可以参看服务端源码里的sendMessagesendBinary两个方法的不同。


参考资料:WebSocket数据交互协议:
http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html
FlashAir服务端(收发字符串):
https://github.com/childoftv/as3-websocket-server/blob/master/src/com/childoftv/websockets/WebSocketServer.as
FlashAir服务端(收发二进制)
http://bbs.egret.com/forum.php?m ... highlight=websocket
Erlang服务端:
http://www.cnblogs.com/suex/p/3669953.html
Java服务端:
http://www.iteye.com/topic/1128567

本教程源码下载(FlashAir服务端+Egret客户端,引擎版本2.5.2):https://coding.net/u/gamedaybyday/p/EgretExample/git/tree/master/WebSocketServerExample






分享到 :
25 人收藏

488 个回复

倒序浏览
lcsweet  圆转纯熟 | 2015-10-20 09:34:37
叮叮当当的点点滴滴
Once  斑竹 | 2015-10-20 11:54:34
  
flqjq123  登堂入室 | 2015-10-20 12:53:52
很好很好
cainiao  登堂入室 | 2015-10-20 15:03:19
感谢楼主  大半夜分享知识   楼主辛苦了
lyy57  斑竹 | 2015-10-20 16:39:57
warden  圆转纯熟 | 2015-10-20 17:02:06
感谢楼主分享!!
顺便问下,用serverSocket做游戏服务器性能可以吗,有没有什么坑
最近想学下后端的知识,能从as开始入门就再好不过了
oooooo  登堂入室 | 2015-10-20 17:58:05
学习了,仔细看看
migo0419  初窥堂奥 | 2015-10-20 20:20:36
dddddddddddddddddddddddddddddddddd
Bear  登堂入室 | 2015-10-20 20:28:09
Egret2.5 WebSocket服务端+客户端(含握手,mask,json,源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部