socket.io

客户端使用

引入socket.io客户端的js

 <script src="./js/socket.io-client/dist/socket.io.js"></script>
        <script type="text/javascript">
          var newssocket=io.connect("http://localhost:3000/newslist") //连接服务器下的某个命名空间
          //向服务器发送news事件
          newssocket.emit("news","name",function(data){ //发送数据时,需要回调函数(当异步获取数据事)
            console.log(data)
            newssocket.emit("newlist",{my:"data"}) //向服务器发送数据
          })
          
          //监听服务器端hi事件
          newssocket.on("hi",function(data){
           console.log(data)
          })
          
        </script>

服务器使用

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,它将使用一个。
客户端

<script>
  var chat = io.connect('http://localhost/chat')
    , news = io.connect('http://localhost/news');
  
  chat.on('connect', function () {
    chat.emit('hi!');
  });
  
  news.on('news', function () {
    news.emit('woot');
  });
</script>

服务器端

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');
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 经历了比武的风波,生活又归于平静,每天都重复着昨天的故事,于是有了过了星期三,翻过一座山,过了星期五还有一上午...
    晓晓石头阅读 3,229评论 0 1
  • 准备有序的地醒来 1.提前一晚做准备。 睡前选好明天穿的衣服,包括配饰和内搭。把它们放在固定的地方,这样的话早晨醒...
    ioodu阅读 3,887评论 0 1
  • plus彭于晏阅读 1,198评论 0 0
  • 睡梦中被嘈杂的说话声惊醒,一看手机,才四点钟。怎么回事啊? 先生也醒来,说反正醒了,不如去天安门广场看...
    汾湖秀阅读 4,417评论 10 9

友情链接更多精彩内容