Socket.io 快速搭建 和 注意事项

栏目: Html5 · 发布时间: 4年前

websocket 是一种比较简单的协议,各种语言中都有很多实现版本,实际上它们差别不大,都是在websocket的基础上做些封装,随便选一个即可。

socket.io 就是众多 websocket 库中的一种,它并不像其它库那样简单地实现了一下websocket,而是在websocket外面包裹了厚厚的一层。普通的 websocket (例如ws库)只需要服务端就够了, socket.io 自定义了一种基于 websocket 的协议,所以 socket.io 的服务端和客户端必须配套。简言之,如果服务端使用 socket.io ,那么客户端就没得选了,必然也用 socket.io 的客户端。

socket.io 的服务端是基于 node 实现的(只提供了这一种语言的服务端实现),同时它提供了多种语言的客户端,包括JavaScript、 Java 、C++、Swift、Dart等,可以看出,socket.io是为了移动端才支持多种语言的,socket.io的目标很高远:统一天下,做最好的websocket库。

当然phper来说也可以用workerman, php-cli 运行的效率和 node 差不多,只不过 php-cli做的io和进程 感觉没有node做的好,而已socket.io 传输的数据为 json ,json 在 JavaScript 里操作可以说极佳体验。

处于业务和成本考虑,没有选择市面吹牛吹上天的swoole来这个socket服务,有那个功夫你还不如直接用golang。Swoole也是有好处的,用来加速一下自己的yii2 laravel 程序还是不错的。 在性能还接受的情况下使用socket.io Socket 服务是挺不错的解决方案。

怎么安装那些自己去百度吧或者直接看这里 https://www.shuaihua.cc/article/socket-io-official-document-translate-part-one/

下面直接说重要的api

也就两个api

on()        和 jquery 一样用于绑定事件
emit()     用于绑定发送事件
httpServer (http.Server) 需要绑定的服务。

socket.io 几个重要的事件

connect         客户端的socket连接实例
connection    用法同Event: ‘connect’。
disconnect    关闭对客户端的链接,如果close的值为true,则关闭下行连接,否则,仅仅关闭命名空间。

在express里集成

var app = require('express')();     //创建express服务
var server = require('http').Server(app);   //绑定httpServer服务
var io = require('socket.io')(server);      //注入socket.io

server.listen(80);

app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
    //链接时候触发
    // socket 客户端当前 sokcet 对像
    socket.emit('news', {hello: 'world'});
    socket.on('my other event', function (data) {
        console.log(data);
    });
});

客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost');
    socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
</script>

如何做向指定用户发送消息?

var app = require('express')();     //创建express服务
var server = require('http').Server(app);   //绑定httpServer服务
var io = require('socket.io')(server);      //注入socket.io

server.listen(80);

app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});


let SocketObj = {}; //先定义一个SocketObj集合

io.on('connection', function (socket) {
    //链接时候触发

    SocketObj[socket.id] = socket;  //链接存放

    // socket 客户端当前 sokcet 对像
    socket.emit('news', {hello: 'world'});
    socket.on('my other event', function (data) {
        console.log(data);
    });

    io.sockets.on('private message', function (data) {
        let to = data.from; //单独发送的SocketId 自己定义什么标记都好
        SocketObj[to].emit('notice email', {data: data.msg});
        //SokcetObj[to].emit('notice message', {data: data.msg});   看个人爱好
        //SokcetObj[to].emit('notice msg', {data: data.msg});       看个人爱好
    })

    socket.on('disconnect', function () {
        delete SocketObj[socket.id];
        socket.emit('notice disconnect'); //通知有人离开了
    })
});

注意什么时候用 io.on() 什么时候用 socket.on()

怎么做特定的聊天室

先在数据库创建特定话题 的聊天室
然后 使用 socket.join(room[, callback]) 
 
io.on('connection', (socket) => {
  socket.join('room 237', () => {
    let rooms = Objects.keys(socket.rooms);
    console.log(rooms); // [ <socket.id>, 'room 237' ]
    io.to('room 237', 'a new user has joined the room'); // broadcast to everyone in the room
  });
});

socket.leave(room[, callback])  从指定的房间里移除客户端,并且可选择的执行一个异常回调函数。

[socket.to](room)          为了能对多个房间触发同一个广播,你需要给多个房间链式的执行几次to方法。

以上所述就是小编给大家介绍的《Socket.io 快速搭建 和 注意事项》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解网站分析(修订版)

图解网站分析(修订版)

[日] 小川卓 / 沈麟芸 / 人民邮电出版社 / 2014-10 / 69.00元

本书以图配文,结合实例详细讲解了如何利用从网站上获取的各种数据了解网站的运营状况,如何从数据中攫取最有用的信息,如何优化站点,创造更大的网站价值。本书适合各类网站运营人员阅读。 第1 部分介绍了进行网站分析必备的基础知识。第2 部分详细讲解了如何明确网站现状,发现并改善网站的问题。第3 部分是关于流量获取和网站内渠道优化的问题。第4 部分介绍了一些更加先进的网站分析方法,其中详细讲解了如何分......一起来看看 《图解网站分析(修订版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具