zmqSocket.as是通过flex自带的socket在前端实现和后台消息通讯的一个简单类库,本来想简单配置下zmqSocket的使用,结果发现各种限制各种问题,整理出最后的使用规范和注意事项如下:
首先关于后台(小弟使用java编写的后台,其他语言这里仅供参考):
1、首先是跨域文件的获取,flex默认回去端口843寻找垮与文件,发送请求"",并希望获得类似下列格式的跨域许可文件。
所以后台服务最好提供这样一个端口来专门负责处理
另外的一个解决方式是在客户端直接使用Security.loadPolicyFile(url); ,从指定的url去获取垮与文件。
2、关于服务端设置,因为socket是以二进制字节流传输信息的,所以要求服务端也应该是针字节流进行解析(xmlSocket貌似没有这样的问题,后面测测再补充下,如果大家有其他方案也可以告知我下,互相学习)。
*****服务端采用的方式,通过读取二进制数组,并将二进制数组接写成字符转来做最终的转义,写入的时候也是直接写入二进制字符串
附上一个java端实现许可文件提供的服务以供参考:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class FlexServer2 {
public static void main(String args[]) {
try {
DataInputStream din;
DataOutputStream dout;
ServerSocket flexServer = new ServerSocket(843);
while (true) {
Socket client = flexServer.accept();
din = new DataInputStream(client.getInputStream());
dout = new DataOutputStream(client.getOutputStream());
String s;
String backFile = "<?xml version=\"1.0\"?>"
+ ""
+ ""
+ ""
+ "";
// 设置一个长度空间的二进制数组来获取客户端信息
byte[] backBytes = backFile.getBytes("utf-8");
while (true) {
byte[] b = new byte[2048];
int length = din.read(b, 0, b.length);
if (length != -1) {
s = new String(b, 0, length);
System.out.println("843读到的信息:" + s);
if (s.equals("")) {
dout.write(backBytes);
dout.flush();
} else {
break;
}
}
}
din.close();
dout.close();
client.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}