Applet + Javascript 替代 comet 轮回 pull
对于不熟悉flex的童鞋,要做一些像聊天等交互性功能,用applet + js也是很容易实现的——而且,跨浏览器,js也容易操作dom进行页面内容展示。
1. 建立一个工程,compiler level设置1.3
2. 找到jre lib 下的plugin.jar,导入路径
3. 写一个比较通用的socket client applet,暴露一些主要方法,比如jsFunCall connect close send,connect方法里开启一个domain thread负责接收处理数据(最好是以接口形式)
话说actionscript那种socket方法回调那是一个简单啊!java线程小麻烦了点。
package com.cisee.appletjs;
import java.applet.Applet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Random;
import netscape.javascript.JSException; import netscape.javascript.JSObject;
public abstract class JsApplet extends Applet {
/** Socket */ private Socket sock = null; /** Input Stream */ private InputStream is = null; /** Output Stream */ private OutputStream os = null;
private final int port = 12800; private final String host = "127.0.0.1";
/** win JSObject */ protected JSObject win = null; /** doc JSObject */ protected JSObject doc = null;
/** Is connected? */ protected boolean connected = false;
Thread reviever;
String userid; String toUserid;
protected String getInfo() { return "Cisee Applet Javascript Interpretor Operation"; }
public void init() { logMsg("Init.."); userid = System.currentTimeMillis() + "_" + new Random().nextInt(100); }
public void destroy() { closeConnect(); }
/** * JS Object */ protected JSObject getWin() { if (win == null) win = JSObject.getWindow(this); return win; }
protected JSObject getDoc() { if (doc == null) doc = (JSObject) getWin().getMember("document"); return doc; }
public abstract void processMessage(final String msg);
/** * Send message to server. * @param msg message that will be sent. */ void sendToServer(final String msg) { if (connected) { try { logMsg(msg); os.write((msg).getBytes()); os.write("\r\n".getBytes()); os.flush(); } catch (IOException e) { logMsg("Stream write error.", e); } } else { wincall("warn_notconnected", null); } }
/** * Close connection. */ void closeConnect() { if(reviever != null) reviever.stop();
connected = false; if (sock != null) { try { sock.close(); } catch (IOException e) { e.printStackTrace(); } sock = null; } }
/** * Call function of outside explorer's script. * @param function function name. * @param param Parameter values. */ protected void wincall(final String function, final Object[] param) { Object[] realParam = param == null?new Object[0]:param; try { getWin().call(function, realParam); } catch (JSException e) { callAlert( "function : " + function + "(arg*" + realParam.length + ") is exist?"); } }
/** * Call alert function of outside explorer's script. * @param msg Message. */ protected void callAlert(final String msg) { try { getWin().call("alert", new String[] { msg }); } catch (JSException e1) { e1.printStackTrace(); } }
/** * Log message when debug is true. * @param msg Message. */ protected void logMsg(final String msg) { System.out.println(msg); }
/** * Log message when debug is true. * @param msg Message. * @param e Exception. */ protected void logMsg(final String msg, final Throwable e) { System.out.println(msg + "\r\nCause : " + e.getMessage()); e.printStackTrace(); }
/** * Connect to server. */ public void connect() { if (connected) { return; } logMsg("Connect to server...");
try { // Conect to server.. sock = new Socket(host, port); is = sock.getInputStream(); os = sock.getOutputStream();
connected = true;
// Thread that receive messages. reviever = new Thread() { public void run() { try { while (sock != null && !sock.isClosed()) { if (is.available() != 0) { byte[] buf = new byte[is.available()]; is.read(buf);
String line = new String(buf).trim(); processMessage(line); } } } catch (IOException e) { logMsg("Error..", e); } finally { if (connected) { closeConnect(); wincall("warn_connect_failed", null); } } } }; reviever.setDaemon(true); reviever.start(); } catch (IOException e) { e.printStackTrace(); } }
public void sendMsg(final String toId, final String msg) { try { // TODO sendToServer(msg); } catch (Exception e1) { logMsg("Error in sendMsg", e1); } }
public void quit() { try { sendToServer("quit"); closeConnect(); wincall("applet_quit", null); } catch (Exception e) { logMsg("Error in quit", e); } }
public boolean isConnected() { return connected; }
}
Applet + Javascript 替代 comet 轮回 pull相关推荐
- java applet 淘汰_java – 替代applet的替代技术?
我有一个(未签名的)小程序,可以让你绘制逻辑电路并在屏幕上测试它(有点像Electronics Workbench),然后它将电路序列化(内部形式,而不是可视化表示)并将其发送到服务器运行一系列自动化 ...
- 用Javascript修正12个常见的浏览器问题
我们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在不同的浏览器会出现不同. 如果你不知道原因, ...
- ExtJs+php学习长连接comet技术开端。
传统AJAX技术 JavaScript 调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新. 使用 ...
- java js隐藏_Javascript匿名函数是否仍然可见? (使用Java applet,这是一种隐藏JS代码的方法)...
我正在使用Javascript编写应用程序.我正在寻找一种隐藏代码的方法,我想我已经找到了一个使用Java Applet的代码. 无论如何,我认为只有在评估js匿名函数的代码后仍然无法以任何方式访问它 ...
- 12种Javascript解决常见浏览器兼容问题的方法
们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在不同的浏览器会出现不同. 如果你不知道原因,不 ...
- 为什么 Web 前端开发不抛弃 HTML 和 CSS,用纯 JavaScript 开发?
从分析介绍来看,题主的主要工作内容是还是从事游戏方向的工作,前端里面的游戏开发大部分应用在canvas绘图里面,应用前端里面的html结构和css样式是比较低:那么咱们就需要从多角度考虑考虑为什么we ...
- matlab箱形图_使用javascript可视化世界幸福来构建箱形图
matlab箱形图 Data visualization is an important and sometimes undervalued tool in a data scientist's to ...
- JavaScript解决常见浏览器兼容问题
JavaScript解决常见浏览器兼容问题 我们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在 ...
- Browser Security-超文本标记语言(HTML)
重要的4个规则: 1 &符号不应该出现在HTML的大部分节点中. 2 尖括号<>是不应该出现在标签内的,除非为引号引用. 3 在text节点里面,<左尖括号有很大的危害. 4 ...
最新文章
- Spring 和 Spring Boot 最核心的 3 大区别,详解!
- html源码md风格,code/html.md at master · Rongx/code · GitHub
- android rfid 读写sdk,Android-SDK-1.0.0-STD android手机调用RFID模块读取电子标签Demo - 下载 - 搜珍网...
- setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位...
- Transformer-XL语言模型:超长上下文依赖
- Android音频开发(七)音频编解码之MediaCodec编解码AAC下
- 轻松解决远程链接的“Gtk-WARNING **: cannot open display;”或“Cannot connect to display;”问题
- Butterworth数字滤波器设计
- 可解释的人工智能 = 三维结构芯片 + 仿突触运动
- 人工智能对我们的影响(随便谈谈)
- 百度地图LBS应用开发代码
- SAP那些事-职业篇-10-顾问最重要的思维方式
- 基于JSP的网上书城
- 如何优雅的面对一坨翔~~感悟编程代码
- ERP与CRM、MRP、PLM、APS、MES、WMS、SRM的关系
- eclipse luna java 版本_eclipse luna使用jdk1.8初始化
- 教你解决浏览器被360劫持篡改主页的麻烦
- c++动态库调试中的脑壳疼
- 计算机教师培训内容,计算机教师培训内容.doc
- 机器学习中常见性能度量汇总