细节问题
- 浏览器端socket.io文件加载
<script src="/socket.io/socket.io.js"></script>
官方示例,令人迷惑。查阅得知,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);
}
});
原文地址:http://segmentfault.com/blog/bornkiller/1190000000427074
相关推荐
真心佩服那些可以经常发布笔记的人,其实我也想经常发来的,奈何技术不够加上懒,要向大神们多多学习了,前段时间有用bomb平台自带的socket写一个聊天室,其实基本就是改了改它的demo,这次想实现一个随机私聊,所以...
在本学习笔记中,我们将深入探讨Socket编程的基本概念、原理以及如何在实际项目中应用。 首先,Socket是网络通信的接口,它提供了一种标准的方式让应用程序能够发送和接收数据。在TCP/IP协议栈中,Socket扮演着...
### Up and Running with Node.js 学习笔记 #### 在线学习了“up and running with Node.js”,做了一些笔记,适合入门。 **Node.js** 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发人员能够在...
在Android开发中,Socket通信是实现设备间数据传输的重要手段,尤其在构建网络服务和进行设备间的实时交互时。...通过不断实践和学习,你可以更熟练地运用Socket通信技术,为你的Android应用构建稳定、高效的网络功能。
总结,"socketchat"项目展示了如何使用Node.js和Socket.IO构建一个简单的网络聊天应用,通过这个项目,开发者可以学习到实时通信的基本原理,以及如何在Node.js环境中开发和管理服务器。同时,也可以了解到客户端...
本篇学习笔记主要聚焦于Java IO流的基本概念、分类、使用方法以及在实际开发中的应用。 一、Java IO流简介 Java IO流分为字符流和字节流两大类,它们都继承自抽象基类`java.io.InputStream`和`java.io.OutputStream...
Node.js是一种基于Chrome...通过阅读这份学习笔记,你将能够系统地学习Node.js开发,从基础概念到实际应用,逐步成为一名熟练的Node.js开发者。无论是搭建Web服务器、处理数据库交互,还是实现实时通信,都能游刃有余。
"IO-黑马程序员Java学习笔记"这个压缩包包含了关于Java IO的详细教程,可以帮助我们深入理解这个关键领域。下面将根据提供的文件名来解析可能包含的知识点。 1. **IO.md**: 这个文件很可能是Markdown格式的学习...
3. **Socket.IO**:学习使用Socket.IO库实现实时通信,适应各种网络环境。 **文件系统操作** 1. **读写文件**:掌握读取、写入、追加文件,以及文件路径处理技巧。 2. **目录操作**:了解创建、删除、遍历目录的...
这份“非常详细JavaSE学习笔记.rar”压缩包显然是一份全面的Java SE学习资源,包含了从基础知识到高级特性的全方位讲解。下面,我们将详细探讨这份笔记可能涵盖的关键知识点。 1. **Java起源与环境搭建**:笔记可能...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
Java聊天室的设计与实现主要基于Socket编程,是Java开发领域中的一个典型实例,适用于学习和研究。这个毕业设计项目提供了完整的源代码,帮助学生或开发者深入理解网络通信和多线程编程。以下将详细讲解该项目涉及的...
### EJB工作原理学习笔记 #### RMI工作原理 RMI(Remote Method Invocation)是一种用于在不同的Java虚拟机(JVMs)之间进行远程过程调用的技术。它允许开发者创建分布式应用程序,这些应用程序可以在网络的不同部分...
本压缩包"Node基础学习笔记.rar"包含了Node.js的基础知识、模块化机制、请求与响应的处理、mongoDB数据库的使用以及Express框架和WebSocket编程的相关内容,是学习Node.js的宝贵资料。 一、Node.js基础 Node.js的...
4. **Socket.IO**:为了实现实时通信,我们需要一个能处理双向通信的库,Socket.IO就是这样一个解决方案。它允许前端和后端之间实时、双向地交换数据,非常适合实时Markdown编辑器的需求。 5. **前端技术**:项目...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
总之,利用Python的Socket库实现端口扫描器是网络编程的一个基本练习,通过学习这个过程,不仅可以加深对网络通信的理解,还能提升Python编程技能。在实践过程中,务必注意遵循网络安全规则,合理合法地使用这些工具...
Web应用中,WebSocket和socket.io可以用于实现长连接,以支持服务器与客户端之间的实时通信。身份验证机制也是Web应用中非常重要的部分,可以采用Cookie配合Session或JWT(JSON Web Tokens)来实现用户身份验证和...
在《JAVA 学习笔记》中,良葛格深入浅出地讲解了Java编程语言的基础知识和进阶技巧,旨在帮助读者从零开始掌握这一广泛应用于企业级开发的重要语言。以下是该学习笔记中可能涵盖的一些核心知识点: 1. **Java基础...