WebSocket 初体验
其实老早就觊觎 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 初体验的更多相关文章
- websocket初体验(小程序)
		之前上个公司做过一个二维码付款功能,涉及到websocket功能,直接上代码 小程序onShow方法下加载: /** 页面的初始数据 **/ data: { code: "", o ... 
- websocket初体验
		(function (window) { var wsUri = "ws://echo.websocket.org:9150"; var output; MyWebSocket = ... 
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
		1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ... 
- SpringBoot初体验及原理解析
		一.前言  上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ... 
- (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验
		1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ... 
- Django3.0 异步通信初体验
		此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ... 
- Django3.0 异步通信初体验(小结)
		2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我们来尝试一下吧! (附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/e ... 
- .NET  WebSockets 核心原理初体验
		上个月我写了<.NET gRPC核心功能初体验>, 里面使用gRPC双向流做了一个打乒乓球的Demo, 实时双向这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通信. 本 ... 
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
		不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ... 
随机推荐
- Swift 开源 Linux Ubuntu Install
			Swift 开源了,它现在变成跨平台的了,开源后的 Swift 不止能运行在 MAC 和 iOS 平台,现在也可以运行在 Linux 平台了.swift.org 网站上面提供了在 Linux 上面安装 ... 
- Linux中解压缩命令gzip和unzip的一点说明
			inux中解压缩命令gzip和unzip的一点说明 转载 2014年10月29日 20:37:35 20741 Linux 常用的压缩命令有 gzip 和 zip,两种压缩包的结尾不同:zip 压 ... 
- apple touch icon 大小总结
			<!-- For Chrome for Android: --> <link rel="icon" sizes="192x192" href= ... 
- Python+selenium打开或关闭浏览器
			Python+selenium打开或关闭浏览器 一.打开或关闭火狐浏览器 1. 初始化一个webdriver实例对象driver,然后打开和关闭firefox浏览器.要用selenium打 ... 
- Laravel 5.1 Blade模板引擎
			为什么要使用blade 它是干什么用的? blade模板引擎使我们写HTML页面的地方,使用它是因为它能给我们提供很多的遍历,减少代码的重复率 提高开发效率.我们写blade的路径是 resource ... 
- Notepad++ 64位 插件管理
			notepad++ 64bit 没有插件管理,如何添加呢? 1.访问https://github.com/bruderstein/nppPluginManager/releases,下载 Plugi ... 
- php 代码的执行
			PHP内核的实现和世界上绝大数的程序一样,接收输入数据,做相应处理后输出结果.用PHP编写的代码就是输入数据,PHP内核对编写的代码进行解释和运算,最后返回运算结果.当编写的PHP代码给内核去执行的时 ... 
- 【BZOJ4176】Lucas的数论 莫比乌斯反演
			[BZOJ4176]Lucas的数论 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)) ... 
- 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了
			关东升的<iOS实战:图形图像.动画和多媒体卷(Swift版)>上市了 承蒙广大读者的厚爱我的<iOS实战:图形图像.动画和多媒体卷(Swift版)>京东上市了,欢迎广大读者提 ... 
- 巨蟒django之权限7:动态生成一级&&二级菜单
			内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ... 
