热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

socket.io学习笔记

socket.io学习笔记一排版若乱掉,请参考https:www.zybuluo.combornkillernote5273细节问题浏览器端socket.io文件加载
socket.io学习笔记一

排版若乱掉,请参考https://www.zybuluo.com/bornkiller/note/5273

细节问题

  • 浏览器端socket.io文件加载


官方示例,令人迷惑。查阅得知,socket.io 库会拦截/socket.io开始的所有路径,当做普通http请求进行响应,返回文件需要经过服务器端处理,我用浏览器保存了一份http://snowykiss.qiniudn.com/socket.io.js,方便查阅。

  • 命名空间
    假设服务器地址为http://127.0.0.1

var io = require('socket.io').listen(1338);
io.sockets.on('connection', function (socket) {
socket.on('test', function (data) {
socket.broadcast.emit('love',{'title' : 'I LOVE you forever...'
,'reason' : 'unbelieve'
});
});
});

var socket = io.connect('http://127.0.0.1:1338')
socket.on('love',function(data){
console.log(data);
})

这里的broadcast会向其它所有连接到此端口的client side发送消息.

var io = require('socket.io').listen(1338);
io.of('/some').on('connection', function (socket) {
socket.on('test', function (data) {
socket.broadcast.emit('love',{'title' : 'I LOVE you forever...'
,'reason' : 'unbelieve'
});
});
});

var socket = io.connect('http://127.0.0.1:1338/some')
socket.on('love',function(data){
console.log(data);
})

这里的broadcast只会向url参数为http://127.0.0.1:1338/some发送消息,虽然所有的连接都是websocket–http://127.0.0.1:1338/的连接。

  • 如果不想使用自定义事件,通过socket.emit('customEvent',data)的方式推送消息,官方支持socket.send()方法。服务器端通过socket.on('message',function(data){}),浏览器端同样通过socket.on('message',function(data){})获取数据,注意这是预置的事件。

  • Worker模式
    不知道websocket对浏览器的压力是否过大,如果担心websocket进程压力,可以启用worker模式,不过需要将socket.io事件封装方式,通过worker.postMessage()配合Worker message Event重新封装一遍,感觉挺鸡肋。

importScripts('socket.io.js');
var socket = io.connect('http://127.0.0.1:1338/');
var self = this;
socket.on('butterfly',function(data){
self.postMessage({"name" : "butterfly","data" : data});
});
socket.on('love',function(data){
self.postMessage({"name" : "love","data" : data});
})

下面是我用Worker微扩展测试,声明新的Worker对象后,就可以监听自定义伪事件,跟socket.io保持同步的on方法,其它伪事件监听应该相似,不做衍生说明

Worker.prototype.reg = {};
Worker.prototype.on = function (event,fn) {
if (!this.reg[event]) {
this.reg[event] = fn;
} else if (typeof(this.reg[event]) == 'array') {
this.reg[event].push(fn);
} else {
this.reg[event] = [this.reg[event], fn];
}
};
var story = new Worker('lover.js');
story.on('love',function(e){
console.log(e.data);
})
story.addEventListener('message', function (e) {
if(e.data.name){
this.reg[e.data.name].call(this, e.data);
}
});

推荐阅读
  • MQTT协议:轻量级消息传输的基石
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种基于发布/订阅模式的轻量级通信协议,适用于低带宽、高延迟或不可靠的网络环境。该协议基于TCP/IP构建,由IBM在1999年首次推出,旨在通过最小化网络流量和代码量,为远程设备提供高效、可靠的消息传输服务。 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • 本文探讨了如何解决在使用CoffeeScript定义类时,实例化后对象为空的问题,并提供了解决方案。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • Node.js 入门指南(一)
    本文介绍了Node.js的安装步骤、如何创建第一个应用程序、NPM的基本使用以及处理回调函数的方法。通过实际操作示例,帮助初学者快速掌握Node.js的基础知识。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 本文深入探讨了Redis中的两种主要持久化方式——RDB(Redis Database)和AOF(Append Only File),并详细解析了两者的实现机制、优缺点以及在实际应用中的选择策略。 ... [详细]
  • 腾讯视频 Node.js 服务国庆阅兵直播高并发实战
    本文分享了腾讯视频团队在国庆阅兵直播项目中,如何利用Node.js服务成功应对2.38亿次观看的高并发挑战。文章将从服务架构、可用性保障、缓存策略、日志与告警等方面详细解析。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
author-avatar
周鑫先生_852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有