均能通过后端打开 TCP 二进制套接字
均能出色地与运行在同一个浏览器窗口中的 Ajax 应用程序(主要是 JavaScript)交互
但这仅仅解决了部分问题。确实可以打开套接字,可以使 Ajax 应用程序使用它们,但 Ajax 应用程序仍然无法处理纯二进制数据。实际上,这两种技术都提供了二进制 TCP 套接字的一种变体,称为XMLSocket,它可用于来回传输纯 XML 数据。这正是您需要的东西。如果这些技术能够通过服务器打开套接字,如果它们能够传输 XML 数据,任务就完成了。Ajax 应用程序可充分利用这一点,模拟实时服务器推送技术。下面将介绍如何实现。
实现 Ajax 服务器推送
将使用两种工具解释这项技术:Adobe Flex 和 OpenLaszlo。首先,需要编写能够接收并缓存连接的后端服务器。在这里不能太过偏离主题,因而要保证服务器基于阻塞 IO。
需要创建一个服务器套接字,接收预先指定地址的连接:
清单 1. 创建服务器套接字
publicclassSimpleServer{
publicstaticvoidmain(String[]args)throwsIOException{
ServerSocketserverSocket=newServerSocket();

serverSocket.bind(newInetSocketAddress("localhost",20340));
Socketsocket=serverSocket.accept();
}
}
在这里,将服务器套接字绑定到 localhost:20340 这一地址。当一个客户端连接到该服务器套接字时,它将为我提供一个套接字,显示连接。Flex 客户端随后会要求策略文件,这是其安全性模型的一部分。通常,这个策略文件的形式类似于清单 2。
清单 2. Flex 客户端策略文件
<?xmlversion="1.0"?>
<!DOCTYPEcross-domain-policySYSTEM
"">
<cross-domain-policy>
<allow-access-fromdomain="*"to-ports="20340">
<cross-domain-policy>
就在连接之后,Flex 客户端会立即发送一条策略文件的请求。该请求仅包含一个 XML 标记:<policy-file-request>。在响应中,您需要返回此策略文件。清单 3 中的代码就完成了这个任务。
清单 3. 发送策略文件响应
publicstaticvoidmain(String[]args)throwsIOException{
ServerSocketserverSocket=newServerSocket();
serverSocket.bind(newInetSocketAddress("localhost",20340));
Socketsocket=serverSocket.accept();
StringPOLICY_REQUEST="<policy-file-request>u0000";
StringPOLICY_FILE="<?xmlversion="1.0"?>n"+
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-38618-3.html
全中国人民都坚持