客户端使用
引入socket.io客户端的js
服务器使用
var app = require('express')();
var News=require("../routes/news")
var http = require('http');
var socketIo=require("socket.io");
app.set("port",3000)
var server=http.createServer(app)
var io=socketIo.listen(server); //监听服务器端口
io.of("/newslist").on("connection",function(socket){ //
new News(socket,io)
socket.on("disconnect",function(){
io.emit("user disconneted")
})
})
class News{
constructor(socket,io){
this.socket=socket;
this.io=io;
this.onmonitorNewList();
this.onRecieveClient();
}
/**
* 监听客户端信息
*/
onRecieveClient(){
var that=this;
this.socket.on("newlist",function(data){
console.log(data)
})
this.socket.on("news",function(name,fn){ //
console.log(name)
that.getNewList(fn)
})
}
/**
*
* @param {客户端回调函数} fn
*/
getNewList(fn){
var data={
name:"张三",
value:""
}
fn(data)
}
}
module.exports=News
socket.io使用方式总结
一 on 和emit事件
on 监听事件
emit 发送事件
var io=require("socket.io").listen(80)
io.on("connnetion",function(socket){
socket.on("news",function(data){ //监听服务器端的news事件
console.log(data)
socket.emit("hello","张三") //向服务器发送hello事件 值为张三
})
})
var io=require("socket.io").listen(80)
io.on("connnetion",function(socket){
socket.on("hello",function(data){ //监听客户端发送的hello事件
console.log(data) //data值为张三
socket.emit("news","newlist")
})
})
二 发送和获取数据(回调函数)
监听事件(发送数据)--服务器端
var io=require("socket.io").listen(80)
io.on("connnetion",function(socket){
socket.on("news",function(name,fn){ //第一个为参数 第二个位获取数据后的回调函数
fn("newlist")
})
})
发送函数事件(获取数据)---客户端
socket.emit("news","params",function(data){
console.log(data) //data的值为newlist
})
三 限制命名空间
如果您可以控制为特定应用程序发出的所有消息和事件,则使用默认/命名空间。 如果您想利用第三方代码或生成与其他人共享的代码,socket.io提供了一种命名空间套接字的方法。
这具有多路复用单个连接的优点。 而不是使用两个WebSocket连接的socket.io,它将使用一个。
客户端
服务器端
var io = require('socket.io')(80);
var chat = io
.of('/chat')
.on('connection', function (socket) {
socket.emit('a message', {
that: 'only'
, '/chat': 'will get'
});
chat.emit('a message', {
everyone: 'in'
, '/chat': 'will get'
});
});
var news = io
.of('/news')
.on('connection', function (socket) {
socket.emit('item', { news: 'item' });
});
四: 发送广播
要进行广播,只需添加广播标志即可发出和发送方法调用。 广播意味着向除了启动它的套接字之外的所有人发送消息。
var io = require('socket.io')(80);
io.on('connection', function (socket) {
socket.broadcast.emit('user connected');
});
五Socket.io 的发送对象范围
1 向当前客户端发送事件
socket.emit('login', { numUsers: numUsers });
2 广播(不包含当前客户端)
socket.broadcast.emit('new message', { username: socket.username, message: data});
3 广播(且包含当前客户端)
io.sockets.emit('message', "this is a test");
4 在房间广播(不包含当前客户端)
socket.broadcast.to('game').emit('message', 'nice game');
5 在房间广播(包含当前客户端)
io.sockets.in('game').emit('message', 'cool game');
6 发送给指定客户端
io.sockets.sockets[socketid].emit('message', 'for your eyes only');