介绍WebSocket

  WebSocket我想大家并不陌生,无论你的的工作中是否用到了它,都或多或少听说过,它是h5中新增的,在某些方面可以很好的替代我们一直沿用的ajax技术,甚至更加的出色。但是它究竟和http有什么区别呢。举个最简单的例子吧,我现在需要根据用户不同的输入来获取后端不同的数据,http请求的方式就是每次用户输入我就发送一个http请求。然而websocket的解决是一次连接成功后,每次用户输入都会发送给后台,但是这个发送的数据却是一直处在已经连接的状态,并不是每次想http每一次都是一次新的连接。

  现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(time interval)(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求(request),然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。并且假设我现在需要命令行的格式不断地发送给后台,后台需要不断的把数据发送到我的电脑,使用传统的http就显得很头疼。于是websocket应运而生,使得即使通讯也变的简单起来。

             传统http请求                                                                                                                        websocket请求

                                              

WebSocket使用

  1.       /*只有支持websocket的浏览器才能运行*/
  2. var wsUrl = "ws://192.168.13.21:33333/v1.0/plugins/api/ftp/tree";//必须以ws开头
  3.  
  4. var websocket = new WebSocket(wsUrl);//new出一个 websocket 实例
  5.  
  6. websocket.onopen = function(){//打开连接websocket
  7. websocket.send("connect");//发送你需要的数据
  8.  
  9. websocket.onmessage = function(evt) {//接受返回的数据
  10. console.log('success',evt)
  11. }
  12.  
  13. //失败的监控
  14. websocket.onerror = function(evt) {//连接失败或者返回失败处理
  15. console.log('error',evt)
  16. }
  17. };
  18.  
  19. // 关闭Socket....
  20. //socket.close()

以上就是websocket简单的使用,但是真正的工作中用到最多的还是即时的连接,于是配合term.js这个插件可以实现前端命令行的形式向后端发送数据,然后将接收到的数据显示在屏幕上。

WebSocket结合term.js

我们先看我们的html文件:

  1. <div id="container-terminal"></div>//插件即将出现模拟屏幕的地方
  2.  
  3. <style type="text/css">
  4. #container-terminal{
  5. width:100%;
  6. }
  7. </style>
  8. <script type="text/javascript" src="ui_assets/js/terminal/term.js"></script>//引入插件js文件

在看我们的js文件:

  1.  var term;
      
  2. var wsUrl = "ws://192.168.13.21:33333/v1.0/plugins/api/ftp/tree"
  3. websocket = new WebSocket(wsUrl);//new 一个websocket实例
  4. websocket.onopen = function(evt) {//打开连接websocket
  5.   term = new Terminal({ //new 一个terminal实例,就是数据展示的屏幕和一些见简单设置,包括屏幕的宽度,高度,光标是否闪烁等等
  6.   cols: 200,
  7.   rows: 80,
  8.   screenKeys: true,
  9.   useStyle: true,
  10.   cursorBlink: true,
  11. });
  12.  
  13.   /*term实时监控输入的数据,并且websocket把实时数据发送给后台*/
  14. term.on('data', function(data) {//term.on方法就是实时监控输入的字段,
  15.   websocket.send(data);//websocket发送给后台
  16. });
  17. term.on('title', function(title) {
  18.   //document.title = title;
  19. });
  20. term.open(document.getElementById('container-terminal'));//屏幕将要在哪里展示,就是屏幕展示的地方
  21. websocket.onmessage = function(evt) {//接受到数据
  22.   term.write(evt.data);//把接收的数据写到这个插件的屏幕上
  23. }
  24. websocket.onclose = function(evt) {//websocket关闭
  25.   term.write("Session terminated");
  26.   term.destroy();//屏幕关闭
  27. }
  28. websocket.onerror = function(evt) {//失败额处理
  29.   if (typeof console.log == "function") {
  30.     console.log(evt)
  31.   }
  32. }
  33. }
  34.  
  35. var close = function() {//关闭websocket
  36. websocket.close();
  37. };

现在我们可以看看我们的效果,值得注意的是你要将你的websocket地址改成有效的地址:

到此为止,简单的websocket用法也就讲完了,也可以完全的使用到你的工作之中。

WebSocket最简易理解,term.js插件的使用的更多相关文章

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  2. PX转REM简易计算器(适用于fittext.js插件计算)

    当你使用fittext.js插件时,通过量取的像素单位PX计算出REM单位值,是一件比较麻烦而繁琐的,为了提高工作效率,自己闲暇写了个小DEMO,现在给大家分享出来. 先看dom: <heade ...

  3. jquery.autocomplete.js 插件的自定义搜索规则

    这二天开始用jquery.autocomplete这个自动完成插件.功能基本比较强大,但自己在实际需求中发现还是有一处不足!问题是这样:当我定义了一个本地数据JS文件时,格式为JSON式的数组.如下: ...

  4. 表单验证的validate.js插件---jQuery Validation Plugin

    早上在公交车上看了一个关于慕课网的教程<表单验证的validate.js插件---jQuery Validation Plugin>,正好可以用到自己近期开发简易微博的注册页面和登录页面, ...

  5. AmazeUI(妹子UI)中CSS组件、JS插件、Web组件的区别

    AmazeUI(妹子UI)是非常优秀的国产前端UI,现在来介绍一下AmazeUI中CSS组件.JS插件与Web组件的区别. CSS组件顾名思义就是仅使用CSS渲染而成的组件,而JS插件也很容易理解,就 ...

  6. rewrap-ajax.js插件

    很久没有动手写技术的文章,这个过程中间一直在写日记,生活点滴的记录替代了技术文章的编写,可以看出以往的内心是激情或烈火,现在是... 最近写了一个JS插件,用圈内的话说叫造了个轮子,造的好与不好都不是 ...

  7. 使用bootstrap的JS插件实现模态框效果

    在上一篇文章中,我们使用 js+css 实现了模态框效果,在理解了模态框的基本实现方法和实现效果后,我们就要寻找更快捷的方法,又快又好的来完成模态框开发需求,从而节约时间,提高效率.一个好的轮子,不仅 ...

  8. iScroll.js插件使用方法

    iScroll.js 用法参考 (share) 分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍 ...

  9. Bootstrap的js插件之側边栏停靠(affix)

    以下是一个比較常见的側边栏停靠的样例: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

随机推荐

  1. GDB抓虫之旅(上篇)

    本文来自网易云社区. 作者:盛国存 前言 问: gdb是什么? 答: 强大的UNIX下命令行调试工具. 问: gdb能干什么? 答: 让你随心所欲的驾驭你的程序:Start.Stop.Examine. ...

  2. Android 上能提高学习工作效率的应用

    在知乎上有朋友问 Android 上能提高学习.工作效率的应用有哪些?我给他们的推荐获得了最多赞同.以后会不断完善更新此贴. Any.do :规划日程,各平台都有. Evernote:记笔记,各平台都 ...

  3. 【廖雪峰老师python教程】——装饰器

    装饰器 # 一个函数装饰器的列子 def log(func): def wrapper(*args,**kwargs): print('Name=%s'%func.__name__) return f ...

  4. 【多校联合】(HDU6043)KazaQ's Socks

    [多校联合](HDU6043)KazaQ's Socks 一条纯粹的水题,记录下只是因为自己错的太多而已. 原因在于对数据的细节的把握不佳. 原题 KazaQ's Socks Time Limit: ...

  5. Sublime text3最全快捷键清单

    [转]https://blog.csdn.net/mrchengzp/article/details/78508509,感谢作者的分享,收录方便查阅   Sublime Text 支持多种编程语言的语 ...

  6. 走进Android系统

    一.Android背景 [Android定义] Android是Google公司在2007年11月5日公布的基于Linux平台的开源手机操作系统. [发展历程] 2005年,Google收购企业And ...

  7. delphi如何模块内部获得自身路径ExtractFilePath和paramstr(0)

    如何模块内部获得自身路径?Exe程序:DLL程序: ExtractFilePath(Application.ExeName) GetCurrentDir TIniFile.Create(GetCurr ...

  8. 使用锚点在HTML页面中快速移动

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. 【bzoj3052】[wc2013]糖果公园 带修改树上莫队

    题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1} ...

  10. 用Web Service实现客户端图片上传到网站

    由于项目需要,通过本地客户端,把图片上传到网站.通过webservice. 这是客户端代码: private void btnimg_Click(object sender, EventArgs e) ...