socket.io

客户端使用

引入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');

你可能感兴趣的:(socket.io)