as3与node.js的socket通信
来源:互联网 发布:php在线客服系统源码 编辑:程序博客网 时间:2024/06/06 10:43
as3与node.js的socket通信
这里使用了一个单例的SocketManager类:
conn = Socket();
conn.addEventListener(Event.CLOSE, onSocketCloseHandler);
conn.addEventListener(Event.CONNECT, onSocketConnectHandler);
conn.addEventListener(IOErrorEvent.IO_ERROR, onSocketIOErrorHandler);
conn.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSocketSecurityHandler);
conn.addEventListener(ProgressEvent.SOCKET_DATA, onSocketDataHandler);
SocketManager最多在连接失败时,进行5次重连。建立socket连接代码:
function connSocket(url:String, port:Number, _endian:String=):
{
(conn == null)
{
initSocket();
}
(_endian == )
{
_endian = Endian.BIG_ENDIAN;
}
CURR_RECONN_NUM = 0;
conn.endian = _endian;
socket_url = url;
socket_port = port;
conn.connect(socket_url, socket_port);
}
如果需要发送socket数据,直接调用send方法:
function send(bytes:IMeteoricByteArray):Boolean
{
(checkConnIsSuc() == false)
{
false;
}
var bytes_len:uint = bytes.size();
var byteArr:ByteArray = ByteArray();
byteArr.writeInt(bytes_len + headLen);
byteArr.writeBytes(bytes.getByte());
conn.writeBytes(byteArr);
conn.flush();
bytes.dispose();
true;
}
格式:数据包头部长度(int-带符号的32位整数)|消息标识(short-16位整数)|消息返回标识(short-16位整数)|…
bytes.writeInt();
bytes.writeShort();
bytes.writeShort();
bytes…
根据不同的消息标识(唯一),后台获取标识后调用不同的解析方法,解析客户端发送的数据
前台as3建立socket,发送数据、解析数据,网上很多例子,这里不重点说了。这里重点介绍node.js如何解析消息(不使用任何第三方库):
var net = require();
var clients = [];
var HOST = ;
var PORT = 7000;
net.createServer(function(socket) {
console.log( + socket.remoteAddress ++ socket.remotePort);
clients.push(socket);
socket.on(, function(data) {
console.log( + socket.remoteAddress ++ socket.remotePort);
var isBuffer = Buffer.isBuffer(data);
(isBuffer) {
var offset = data[](0);
var headCode = data[](offset);
offset += 2;
var headBackCode = data[](offset);
offset += 2;
var len = data[](offset);
offset += 2;
var msg = data.toString(, offset, offset + len)
console.log(headCode + + headBackCode + + msg);
broadcast(msg, socket);
} {
console.log();
}
});
socket.on(, function() {
console.log( + socket);
clients.splice(clients.indexOf(socket));
});
function broadcast(message, sender) {
clients.forEach(function(client) {
client.write(message);
});
}
}).listen(PORT, HOST);
console.log();
如果一切正常,前台发送数据时,控制台上能看到解析的数据:
1000是头标识,10为消息返回标识,abcdefg为发送的字符串。
var data:MeteoricSocketSendDataProxy = SocketManager.getInstance().getSocketSendDataProxy(1000, 10) as MeteoricSocketSendDataProxy;
data.addStringData(msg);
SocketManager.getInstance().sendDataProxy(data);
上面的解析过程可能比较繁琐,你可以使用Node.js的ByteBuffer (nodejs的ByteBuffer,和C++通信的利器!)
作者:play175
https://npmjs.org/package/ByteBuffer
使用方法也比较简单:
var buf = ByteBuffer(data);var arr = buf.int32() .() .() .string() .unpack();console.log(arr);broadcast(arr[3], socket);var offset = data[](0);var headCode = data[](offset);offset += 2;var headBackCode = data[](offset);offset += 2; var len = data[](offset);offset += 2;var msg = data.toString(, offset, offset + len)console.log(headCode + + headBackCode + + msg);broadcast(msg, socket);
有兴趣的可以下载全部源码(Flex-SDK4.5 + node.js),点此立即下载>>
转载:http://www.cnblogs.com/meteoric_cry/archive/2012/12/15/2819563.html
来自:http://www.verydemo.com/demo_c134_i50667.html
0 0
- as3与node.js的socket通信
- as3与node.js的socket通信
- AS3与JS通信
- as3 与js相互通信
- as3与js通信详解
- as3与.net进行socket通信
- Flash/AS3与C++通过socket通信
- Flash/AS3与C++通过socket通信
- Flash/AS3与C++通过socket通信
- erlang和as3 socket的二进制通信
- java与node.js通信
- iOS客户端与服务器端Node.js实现通信的方法
- AS3与JS通信,通过接口ExternalInterface进行通信
- js与as3的交互
- Unity3D与Node.js通过TCP通信.
- 关于Flex\AS3 Socket 通信 安全沙箱的问题
- 使用socket.io和node.js搭建及时通信系统
- AS3与JAVA socket
- 面试笔试问题:大数据量,海量数据 处理方法总结
- Zeroc Ice3.4.2的demo无法打开
- 【leetcode】Best Time to Buy and Sell Stock II
- 轻应用能否创造社交营销新商业价值
- 单桂华-大规模天文时空数据的可视化
- as3与node.js的socket通信
- 【VC++】如何最大化对话框
- C++之动态绑定和静态绑定
- C#字符串压缩&解压
- WinCE注册表--创建、打开、读写、关闭
- Emacs 键绑定的格局
- Cocos2dx 3.0 过渡篇(八)浅谈容器Vector
- CXF+Spring+Tomcat简明示例
- 关于UITableViewCell的方法及属性