- 浏览: 243783 次
- 性别:
- 来自: 沈阳
-
文章分类
最新评论
-
Araxis:
也遇到了楼主的问题,我用的sockjs.0.3.4,升级版本到 ...
Websocket出现的错误 -
love_jun1314:
怎么进行转换成功并没有看到a.flv文件呢? 你把commen ...
java调用ffmpeg执行视频转换 -
枫林top:
不错,挺好的
看老外程序员如何向妻子解释设计模式 -
likj_sh:
太感谢了 ,困惑了好久
Struts2 + Spring + Hibernate + DWR 项目布署笔记 -
dhl004:
...
web.xml 通过contextConfigLocation配置spring 的方式
简介
在上一篇"基础-web即时通讯系统的四种实现"中,我们讨论了如何使用flash/actionscript,来实现socket/tcp,并使用开源的haxe来编译。而本文将介绍如何使用javascript调用编译出的flash来进行通讯。
加载flash
我使用swfobject.js来加载我们编译出的flash文件——socket_bridge.swf。
swfobject.js是一种易用的、符合标准的在网页中嵌入flash对象的方法,你只需要在网页中引用一个小巧的js文件。你在网上可以很容易下载到它。
初始化flash
我们可以调用swfobject.js里提供的方法,来编写跨浏览器的加载flash的代码。
function initialFlash(){ var so = new SWFObject("socket_bridge.swf", "socketBridge", "800", "300", "9", "#ffffff"); so.addParam("allowscriptaccess", "always"); so.addVariable("scope", "socket"); so.write("flashcontainer"); }
这段代码的意义是,将socket_bridge.swf下载到浏览器端,并在id为flashcontainer的html元素下。并将对象名为socket的对象暴露给flash。
考虑到这里使用到了flashcontainer这个html元素,我们需要在这个html元素已经存在于dom以后才可以执行这段代码,比如在window.onload事件里。
onload=function(){ initialFlash(); }
封装flash socket
我们需要在initialFlash执行前声明一个对象名为socket的对象。
var socket = { config :{ ip:"127.0.0.1", port:4502, flashcontainer:"flashcontainer", auto:true }, connect : function() { socket.flash.log("begin connect to session server"); socket.flash.connect(socket.config.ip, socket.config.port); }, send : function(msg) { if(socket.isConnected >= 1){ socket.flash.send(msg); } }, loaded : function() { socket.flash = document.getElementById("socketBridge"); socket.isConnected = 0; if(socket.config.auto){ socket.connect(); } }, connected : function() { socket.isConnected = 1; socket.flash.log("connected to session server"); }, close : function() { socket.flash.close(); socket.isConnected = 0; socket.flash.log("close connection"); }, disconnected : function() { socket.isConnected = 0; socket.flash.log("disconnected"); }, ioError: function(msg) { socket.flash.log(msg); socket.isConnected = 0; }, securityError: function(msg) { socket.flash.log(msg); socket.isConnected = 0; }, receive: function(msg) { //callback } };
这里有几处需要注意:
socket.config.auto为true时,flash文件socket_bridge.swf加载完毕时,自动调用socket.flash.connect连接本地的4502端口。
socket.flash.log为对flash的trace函数的封装,可以调用它向flash控制台写入一些调试信息。
socket.isConnected为socket连接的状态量,实际上在真实的聊天室里,连接完以后还需要登录和验证的一系列过程,所以用此变量来表示这些自定义状态。
操作flash socket
有了这个socket对象,我们便可以在javascript里操作flash socket了。比如说:
socket.send("hello socket")
效果演示
完整代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="js/swfobject.js"></script> <script> var socket = { config :{ ip:"127.0.0.1", port:4502, flashcontainer:"flashcontainer", auto:true }, connect : function() { socket.flash.log("begin connect to session server"); socket.flash.connect(socket.config.ip, socket.config.port); }, send : function(msg) { if(socket.isConnected >= 1){ socket.flash.send(msg); } }, loaded : function() { socket.flash = document.getElementById("socketBridge"); socket.isConnected = 0; if(socket.config.auto){ socket.connect(); } }, connected : function() { socket.isConnected = 1; socket.flash.log("connected to session server"); }, close : function() { socket.flash.close(); socket.isConnected = 0; socket.flash.log("close connection"); }, disconnected : function() { socket.isConnected = 0; socket.flash.log("disconnected"); }, ioError: function(msg) { socket.flash.log(msg); socket.isConnected = 0; }, securityError: function(msg) { socket.flash.log(msg); socket.isConnected = 0; }, receive: function(msg) { //callback } }; function initialFlash(){ var so = new SWFObject("socket_bridge.swf", "socketBridge", "800", "300", "9", "#ffffff"); so.addParam("allowscriptaccess", "always"); so.addVariable("scope", "socket"); so.write(socket.config.flashcontainer); } onload=function(){ initialFlash(); } </script> </head> <body> <textarea id="cmd" style="width: 400px; height: 300px;">socket.send("")</textarea> <input type="button" value="exec" onclick="eval(document.getElementById('cmd').value);" /> <div id="flashcontainer"></div> </body> </html>
发表评论
-
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2017-09-16 22:28 661系列简介 也许,三百 ... -
30分钟掌握ES6/ES2015核心内容
2017-01-09 11:21 417ECMAScript 6(以下简称ES6)是JavaSc ... -
requirejs、require方法冲突
2016-12-21 18:10 1562如果加载了多个requirejs脚本,每个requirejs ... -
谈谈使用 promise 时候的一些反模式
2016-11-25 15:20 409本文翻译自 We have a problem with ... -
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2016-11-23 12:11 662HTML5 Canvas中提供了 ... -
移动端H5页面高清多屏适配方案
2016-11-17 08:35 840背景 开发移动端H5页面 面对不同分辨率的 ... -
JavaScript Promises 相当酷
2016-09-02 18:53 521And when I promise some ... -
gulp使用小结
2016-05-22 19:02 655这篇文章不会介绍 gulp 的起源、发展;不会去一个个讲解 ... -
用gulp做一个略完整的前端打包工作
2016-05-22 18:59 2437我们的官网要改版,会从以前的单一产品变成 ... -
前端神器avalonJS入门
2016-05-19 19:32 600本章将介绍如何使用avalon来实现前端路由功能。 我们需 ... -
给Webstorm的HTML自动压缩插件
2016-05-07 14:20 1268前端代码的压缩 前端的js、css、html的压缩不仅会让 ... -
gulp教程之gulp中文API
2016-05-07 13:44 569http://www.ydcss.com/ ... -
gulp详细入门教程
2016-05-07 13:00 557简介: gulp是前端开发过程中对代码进行构建的工具, ... -
HTML5 Boilerplate - 让页面有个好的开始
2016-04-20 19:08 675一:HTML5 Boilerplate是什 ... -
Websocket出现的错误
2016-04-06 10:49 7012前端使用sockjs,后台使用spring的websocke ... -
移动平台的meta标签-----神奇的功效
2016-02-18 10:51 466对于桌面平台web布局中大家对meta标签再熟悉不过了,它永 ... -
掌握Tiles 框架---Tiles入门和Tiles 框架和体系结构
2016-01-05 19:25 801入门 本教程所讲述的 ... -
GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
2015-10-26 17:34 1191WGS-84:是国际标准,GPS坐标(Google Eart ... -
Modernizr.js入门指南
2015-05-26 17:52 677Modernizr.js入门指南 ... -
智能机浏览器版本信息
2015-05-12 01:06 554/* * 智能机浏览器版 ...
相关推荐
仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理.zip仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理...
《Python-引导自己从头开始编写一个操作系统》是一本面向自学者的书籍,旨在帮助读者深入理解操作系统的原理,并通过Python语言实现一个简单的操作系统。在学习过程中,你可以掌握计算机系统的基础知识,了解操作...
### 从头开始构建一个嵌入式Linux发行版 #### 目标与概述 本教程旨在展示如何在目标系统上自行构建并安装Linux系统。这一过程并非简单的预装发行版安装,而是通过从零开始的方式,使用户能够在目标设备上运行...
JavaScript Shadow是一个创新的Web引擎项目,它展示了JavaScript语言在构建高性能网络应用方面的潜力。这个引擎几乎完全使用JavaScript从头开始编写,打破了传统上由C++或Rust等系统级语言主导的浏览器内核构建模式...
DIY-Deep-Learning-Workstation, 从头开始构建一个深入学习工作站 DIY-Deep-Learning-Workstation从头构建一个深度学习工作站。 本文档是为 14.04编写的,但大多数步骤也应适用于其他Ubuntu版本和leanring框架。具有...
jQuery是JavaScript的一个库,它简化了DOM操作、事件处理、动画效果和Ajax交互等任务,使得开发者可以更高效地工作。本资源"javascript经典特效---jQuery仿动感flash自动滚动图片切换广告插件.rar"是一个基于jQuery...
本课程“JavaScript_从头开始”旨在帮助初学者全面掌握JavaScript的基础知识,逐步进阶到高级概念,从而能够构建功能丰富的网页应用。 JavaScript的核心特性包括动态类型、原型继承、基于对象以及函数作为一等公民...
mini-arm-os, 从头开始构建 ARM Cortex M 系列的最小多任务操作系统内核 构建最小的多任务操作系统内核先决条件带有STM32微控制器实现的 QEMU 。生成说明./configure --disable-werror --enable-debug --target-list...
我们将从头开始,一步步地搭建整个系统,以便读者能够轻松地搭建自己的 RustDesk 远控软件。 搭建节点服务器 要搭建 RustDesk 远控软件的节点服务器,我们需要满足以下条件: 1. 自有一台服务器 2. 会搭建基本的...
在本教程中,我们将深入探讨如何从零开始构建一个现代JavaScript技术栈,这对于任何希望成为一名全栈开发者或者希望更新自己现有技术栈的人来说都是一个宝贵的资源。JavaScript作为一种强大的、广泛使用的编程语言,...
总的来说,Spika是一个强大的工具,可以帮助开发者快速实现聊天功能,而无需从头开始构建复杂的通信系统。其开源特性鼓励了社区的参与和创新,使得Spika不断进化和适应新的需求。无论你是想在企业应用中添加内部通讯...
"webservice1"可能是一个包含Web服务源代码或者部署文件的项目目录,而"jaws_cli"可能是一个JAX-WS的命令行工具,用于生成客户端代码或进行其他与Web服务相关的操作。 总的来说,这个压缩包提供了从头开始创建和...
下面,我们将详细讨论如何从零开始构建一个简单的OPC客户端。 **1. 项目设置** 首先,我们需要创建一个新项目。在Visual C++ 6.0中,使用"File" -> "New..."命令创建一个"Win32 Console"类型的项目,并将其命名为...
这种协议不仅仅局限于即时通讯,它还广泛应用于构建大规模即时通信系统、Internet游戏平台、搜索引擎、协作空间、语音和视频会议系统等多种应用场景。每天都有更多的创新应用涌现出来,这充分展示了XMPP协议的强大...
角滚动间谍从头开始构建的简单,轻量级的scroll-spy伪指令。 它在元素滚动到视图或视图之外时广播事件。用法在要为其接收滚动事件的元素上添加scroll-spy属性和id 。 当元素首次滚动到视图中时,会触发一次'...
使用JavaScript从头开始构建汽车驾驶游戏 Packt发布的使用JavaScript从头开始构建汽车驾驶游戏的代码库 使用JavaScript从头开始构建汽车驾驶游戏 这是发行的的代码库。 它包含从头到尾完成视频课程所需的所有支持...
在本教程中,我们将深入探讨如何使用AngularJS框架从零开始构建一个Web应用程序。AngularJS是Google维护的一个开源JavaScript框架,它主要用于构建单页应用程序(SPA)。这个框架以其数据绑定和依赖注入特性而闻名,...
Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时...通过学习和使用这个SDK,开发者可以迅速在自己的应用中实现稳定、可靠的即时通信功能,而无需从头构建整个通讯系统,大大节省了开发时间和资源。
互操作性则着重于简化与其他应用程序和Web服务之间的交互操作;而提升开发效率则旨在提高开发人员的工作效率,加快应用的开发速度。 #### Forms开发人员规划 针对Forms开发人员,建议采取以下策略进行迁移规划: ...
app-datepicker, 使用聚合物从头开始构建的元件 应用程序 datepicker ( 以前为 jv-datepicker ) 有关详细信息...一个自定义的聚合物元素,从头开始提供一个基于谷歌设计的更具吸引力和丰富性的。实时更新( )高兴宣布 ap