我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序。最最开始
先安装socket.io:
利用Node的搭建Http服务 分为两个文件,服务端文件app.js和客户端index.html app.js
这里需要注意的是: require(‘socket.io').listen(app) 实际上这句就是讲socket的监听加入的app设置的http模块了 io.sockets.on('connection',function()…)这里设置了在连接后进行的处理,代码示例中,主要包含两件事,一个是向前段发送news的事件,一个是监听my other event事件。 index.html
客户端一个引用了socket.io.js的javscript库还有就是连接服务器(通过io.connect(‘http://localhost')) 之后在监听收到news的事件后,发送my other event事件 利用Express3框架上面的例子只是使用nodejs建立了一个交互,也可以使用express2的web框架, 具体app.js代码如下: app.get('/',function (req,res) { io.sockets.on('connection',function (socket) { 接收发送事件 socket.io允许用户自定义发送接收的事件。除了connect,message,disconnect三个事件外,用户可以自定义自己的事件 io.sockets.on('connection',function (socket) { socket.on('private message',function (from,msg) { socket.on('disconnect',function () { 存储数据有的时候需要存储一些和客户端关联的数据在会话里,socket.io也是支持的,代码如下: socket.on('msg',function () { socket.set和socket.get方法分为用于设置和获取变量。 设置命名空间有的时候要一个程序支持多个应用,如果使用默认的 “/” 命名空间可能会比较混乱。如果想让一个连接可以支持多个连接,可以使用如下的命名空间的方法: app.js
client.js
chat.on('connect',function () { news.on('news',function () { 发送获取数据有的时候,你需要在发送数据后,等待服务器的消息确认。当然简单的发,可以通过两次消息发送,来完成。这里介绍一种使用回调函数的方法: app.js
广播向所有的连接触发事件,这里注意:不包括本身连接的事件。 我写的聊天程序: index.html var app = require('http').createServer(handler),io = require('socket.io').listen(app),fs = require('fs'); app.listen(80);function handler (req,res) { res.writeHead(200); io.sockets.on('connection',function (socket) { socket.set('nickname','nickname',function(){ socket.on('set nickname',function(name){ socket.on('chat',function(data){ socket.emit("notice",{message: name + ":" + data.message});
res.sendfile(__dirname + '/index.html');});
socket.emit('news',{ hello: 'world' });
socket.on('my other event',function (data) {
console.log(data);
});});
io.sockets.emit('this',{ will: 'be received by everyone'});
console.log('I received a private message by ',from,' saying ',msg);
});
io.sockets.emit('user disconnected');
});});
socket.on('set nickname',function (name) {
socket.set('nickname',name,function () {
socket.emit('ready');
});
});
socket.get('nickname',name) {
console.log('Chat message by ',name);
});
});});
chat.emit('hi!');
});
news.emit('woot');
});
socket.on('ferret',function (name,fn) {
fn('woot');
});});
client.html
socket.broadcast.emit('user connected');});
app.js
fs.readFile(__dirname + '/index.html',data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.end(data);
});}
// socket.emit('news',{ hello: 'world' });
// socket.on('my other event',function (data) {
// console.log(data);
// });
});
socket.set('nickname',function(){
console.log("change nickname=>" + name);
socket.emit('nickname ready');
});
});
socket.get('nickname',function(err,name){
socket.broadcast.emit("notice",{message: name + ":" + data.message});
console.log("chat: " + data.message);
});
});});