zoukankan      html  css  js  c++  java
  • socket.io的基本使用

    服务端:

    1.监听客户端连接:

    io.on("connection",socket=>{ });

    不分组数据传输:传输对象为当前socket

    2.1给该socket所有客户端广播消息

    socket.emit("名称",内容);

    2.2给该socket除了自己外的所有客户端广播消息

    socket.broadcast.emit("名称",内容);

    2.3给该socket所有客户端广播消息

    socket.emit("名称",内容);

    2.4给在game房间内除了自己的其他所有客户端广播消息

    socket.broadcast.to(‘game’).emit("名称",内容);

    2.5给在game房间内包括自己的所有客户端广播消息

    io.sockets.in(‘game’).emit("名称",内容);

    3.监听该socket的客户端发送给服务端的消息

    socket.on("名称",msg=>{ });

    分组数据传输:生成命名空间来管理用户

    服务端:

    io.sockets.on('connection', function (socket) {

      socket.on('firefox', function (data) {

           socket.join('firefox');

      });

      socket.on('chrome',function(data){

           socket.join('chrome');

      });

    });

     

    //emit to 'room' except this socket client

    socket.broadcast.to('chrome').emit('event_name', data);

    //emit to all socket client in the room

    io.sockets.in('chrome').emit('event_name', data)

     

    客户端:

    socket.emit('firefox'); //就可以加入 firefox 聊天室

    socket.emit('chrome');  //就可以加入 chrome 聊天室

    socket连接需要添加权限验证,让已登录用户socket直接连接到服务器上,未登陆的用户无条件拒绝连接

    callback 函数有两个参数,第一个为 error ,第二个参数为是否授权bool值,通过授权回调函数应为 callback(null,true) ,其它情况下都为拒绝建立连接。

    io.sockets.authorization(function (handshakeData, callback) {

      callback(null, true);

    }).

    websocket是持久化的协议,http是非持久化的协议。

    http的1.0协议中一个http连接只有一次request和response;

    http的1.1协议中允许一个http连接,存在多次请求和接收数据。

    websocket连线过程中,浏览器和服务器只需要做一个握手的动作就形成了一条快速通道,实现两者相互推送数据。

    Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。

    在客户端的话,可以通过<script src="/socket.io/socket.io.js"></script>

             或引用socket.io的CDN服务。                      <scriptsrc="http://cdn.socket.io/stable/socket.io.js"></script>

    socket.io实现监听:

             1.引用socket.io模块,调用listen方法传入端口号即可;

             var app = require('express')();

            

    var http = require('http').Server(app);

            

    var io = require('socket.io')(http);

    socket.io实现事件注册:

             服务端:connection、disconnect、emit

             客户端:connect、connecting、disconnect、connect_failed、reconnect、emit

             io.on(connection,function(socket){

                       //连接成功

                       console.log("socket连接成功")

                       //断开连接

                       socket.on('disconnect',function(){

                                console.log("socket连接断开")

                       })

             })

    socket.io提供两种服务端广播方式。参数一:名称;参数二:内容

             1.全局广播:socket.broadcast.emit('DATA',data);

             2.命名空间广播:socket.broadcast.to('chat').emit('DATA',data)

    1.创建对象:var ws = new WebSocket(url,name);

    2.发送文本消息:ws.send(msg);

    3.接受消息:ws.onmessage = (function(){...})();

    4.错误处理:ws.onerror = (function(){...})();

    5.关闭连接:ws.close();

               var socket;

                if(typeof(WebSocket) == "undefined") {

                    alert("您的浏览器不支持WebSocket");

                    return;

                }

                //连接

                $("#btnConnection").click(function() {

                    //实例化WebSocket对象,指定要连接的服务器地址与端口

                    socket = new WebSocket("ws://192.168.1.2:8888");

                    //打开事件

                    socket.onopen = function() {

                        alert("Socket 已打开");

                       socket.send("这是来自客户端的消息" + location.href + new Date());

                    };

                    //获得消息事件

                    socket.onmessage = function(msg) {

                        alert(msg.data);

                    };

                    //关闭事件

                    socket.onclose = function() {

                        alert("Socket已关闭");

                    };

                    //发生了错误事件

                    socket.onerror = function() {

                        alert("发生了错误");

                    }

                });

    服务端:

             1.监听客户端连接 io.on('connection',socket=>{ })

  • 相关阅读:
    运营设计方法论
    使用 typescript ,提升 vue 项目的开发体验(2)
    PAT 1078. 字符串压缩与解压
    PAT 1077. 互评成绩计算
    PAT 1076. Wifi密码
    PAT 1075. 链表元素分类
    PAT 1074. 宇宙无敌加法器
    PAT 1073. 多选题常见计分法
    PAT 1072. 开学寄语
    PAT 1071. 小赌怡情
  • 原文地址:https://www.cnblogs.com/surui/p/7685091.html
Copyright © 2011-2022 走看看