其实老早就觊觎 Socket 这碗美食了,在 WebSocket 发出后更是心潮澎湃...

奈何这需要后端同志的帮助,使得至今才得以品尝。(当然本文也只涉及前端部分)

以前想监听其他设备变化,大屏幕交互,还有客服,多设备游戏等,

用过轮询(特定的时间间隔请求一次),后来也受教使用长链接(后端实现链接 1s 内不断,断了再请求)

但总要为性能这事捏一把汗,

而 Socket/WebSocket 就是即时通信,就是能很好的完成上述需求呀,

啊哈哈哈,不禁笑出了声音...

好的,回归正题,先看封装代码

function Socket(url, options) {
var opt = $.extend({
onopen: function(e){},
whenGet: function(val){},
onreset: function(){},
beforeClose: function(){},
onclose: function(){}, // (注:此处已不能再传输,为关闭后运行)
}, options || {}); var wsImpl = window.WebSocket || window.MozWebSocket;
var socket = new wsImpl(url); // 关闭或刷新页面时,也关闭 socket
var DispClose = true;
$(window).on('beforeunload', CloseEvent);
$(window).on('unload', UnLoadEvent);
function _close() {
opt.beforeClose.apply(this, arguments);
socket.close();
}
function CloseEvent() {
if (DispClose) return "是否离开当前页面?";
_close();
}
function UnLoadEvent() {
DispClose = false;
_close();
} // WebSocket 本身事件
socket.onopen = function(){
opt.onopen.apply(this, arguments);
}
socket.onclose = function(){
opt.onclose.apply(this, arguments);
}
socket.onmessage = function(){
opt.whenGet.apply(this, arguments);
}
socket.onerror = function(e){
console.log(e);
} // 外放的其他方法
return {
send: function(val) {
socket.send(val);
},
reset: function(){
socket = new wsImpl(url);
opt.onreset.apply(this);
},
close: _close,
};
}

演示地址: http://sum.kdcer.com/test/SocketGame/

技术难点:

1. 从后端那搞到 ws:// 格式的 url

2. 处理好 whenGet 的传值,可以看看演示的源码,这个就看需求,相当考逻辑了

但还有个小问题就是 socket 延时/主动断开的情况,beforeClose 就不运行了,也就不能传输告诉别人我挂了,这个很尴尬

敲黑板,WebSocket 是个好东西,大家快用起来吧,一起研究哈

WebSocket 初体验的更多相关文章

  1. websocket初体验(小程序)

    之前上个公司做过一个二维码付款功能,涉及到websocket功能,直接上代码 小程序onShow方法下加载: /** 页面的初始数据 **/ data: { code: "", o ...

  2. websocket初体验

    (function (window) { var wsUri = "ws://echo.websocket.org:9150"; var output; MyWebSocket = ...

  3. (一)SpringBoot基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  4. SpringBoot初体验及原理解析

    一.前言 ​ 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...

  5. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  6. Django3.0 异步通信初体验

    此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ...

  7. Django3.0 异步通信初体验(小结)

    2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我们来尝试一下吧! (附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/e ...

  8. .NET WebSockets 核心原理初体验

    上个月我写了<.NET gRPC核心功能初体验>, 里面使用gRPC双向流做了一个打乒乓球的Demo, 实时双向这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通信. 本 ...

  9. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

随机推荐

  1. NIPS2016 best paper: Value Iteration Networks 解析

    论文介绍ppt:https://pan.baidu.com/s/1gfDURyb Tamar, Aviv, et al. "Value iteration networks." A ...

  2. db2 blob EMPTY_BLOB()

    --针对BLOG类型的列,写入一个0长度的字符串

  3. Error:“const char*”类型的实参与“wchar_t”类型的形参不兼容

    MainApp\RPolarView.cpp(1571): error C2664: “ATL::CStringT<BaseType,StringTraits>::ReverseFind” ...

  4. Laravel5.1 Middleware中间件(初级)

    中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘. 一句话就可以解释它:过滤HTTP请求专用机制. 为什么要使用中间件? 过滤HTTP请求是可以写在别的地方,比如说控制器中 ...

  5. Hibernate-缓存/懒加载/抓取策略

    懒加载测试: /*类的延迟加载 * * session.get * 1.方法加载出来的对象是class对象 * 2.在session.get方法执行的时候发出sql语句 * 3.class对象是有值的 ...

  6. <转载> Jquery的使用技巧-实用!

    1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...

  7. 43、android:screenOrientation

    android:screenOrientationThe orientation of the activity's display on the device. The value can be a ...

  8. Convert.ToInt32(string '000000003') 变成了 3

    Convert.ToInt32(string '000000003') 变成了 3 但是在查询的时候需要用的是string 这里的convert.toint32 反而起了坏作用,不是所有的时候都要用c ...

  9. linux下tcpdump命令的使用

    一般情况下linux系统会自带tcpdump工具,如果系统没有安装,直接用命令安装就行了. 安装命令:yum install -y tcpdump 查看安装版本命令:tcpdump --help 查看 ...

  10. python的标准类型分类

    数据属性 储存模型 更新模型 访问模型 数字 标量/原子类型 不可变类型 直接存取 字符串 标量/原子类型 不可变类型 顺序 列表 容器  可变类型 顺序  元组 容器 不可变类型 顺序 字典 容器 ...