• socket.io 入门篇(一)


    本文原文地址:https://www.limitcode.com/detail/591b114bb1d4fe074099d9c9.html

    前言

    本篇介绍使用node.js模块组件socket.io实现一个非常非常简易的聊天案例。
    本系列文章不对 socket.io 历史背景做过多阐述,只会通过一个个的案例带领大家进入socket.io的殿堂,增进小伙伴在socket.io实际开发中的基本使用。
    socket.io 官网地址:https://www.socket.io
    本篇案例使用到的node.js模块组件:
    express # 做为 socket 通信的依赖服务基础
    socket.io # socket 通信基础模块

    源码下载地址:http://pan.baidu.com/s/1mhPJHyg

    项目文件结构

    服务端

    var http=require("http");
    var express=require("express");//引入express
    var socketIo=require("socket.io");//引入socket.io
    var app=new express();
    var server=http.createServer(app);
    var io=new socketIo(server);//将socket.io注入express模块
    //客户端 1 的访问地址
    app.get("/client1",function (req,res,next) {
        res.sendFile(__dirname+"/views/client1.html");
    });
    //客户端 2 的访问地址
    app.get("/client2",function (req,res,next) {
        res.sendFile(__dirname+"/views/client2.html");
    });
    server.listen(8080);//express 监听 8080 端口,因为本机80端口已被暂用
    //每个客户端socket连接时都会触发 connection 事件
    io.on("connection",function (clientSocket) {
        // socket.io 使用 emit(eventname,data) 发送消息,使用on(eventname,callback)监听消息
        //监听客户端发送的 sendMsg 事件
        clientSocket.on("sendMsg",function (data) {
            // data 为客户端发送的消息,可以是 字符串,json对象或buffer
            // 使用 emit 发送消息,broadcast 表示 除自己以外的所有已连接的socket客户端。
            clientSocket.broadcast.emit("receiveMsg",data);
        })
    });

    客户端

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>客户端1</title>
    </head>
    <body>
    <label>聊天内容:</label><br/>
    <textarea id="content" style="height: 200px; 300px;"></textarea>
    <br/>
    <input  id="sendMsg" type="text"/>
    <button id="btn_send">发送</button>
    
    <!-- 首先引入 socket.io 客户端脚本-->
    <script src="/socket.io/socket.io.js"></script>
    <script type="text/javascript">
     var socket = io.connect();//连接服务端,因为本机使用localhost 所以connect(url)中url可以不填或写 http://localhost
        // 监听 receiveMsg 事件,用来接收其他客户端推送的消息
     socket.on("receiveMsg",function (data) {
            content.value+=data.client+":"+data.msg+"
    ";
     });
     var content=document.getElementById("content");
     var sendMsg=document.getElementById("sendMsg");
     var btn_send=document.getElementById("btn_send");
     btn_send.addEventListener("click",function () {
            var data={client:"客户端1",msg:sendMsg.value};
     //给服务端发送 sendMsg事件名的消息
     socket.emit("sendMsg",data);
     content.value+=data.client+":"+data.msg+"
    ";
     sendMsg.value="";
     });
    
    </script>
    
    </body>
    </html>

    界面效果如下:

  • 相关阅读:
    java 的三种代理模式 (二)——子函数切面
    王者荣耀为什么不使用微服务架构,服务的极简主义,为什么交易网关使用redis做持久
    tcp_syncookies 半连接
    tcp_tw_recycle tcp_tw_reuse与timewait【yetdone】
    动态代理,没有被代理对象
    一次jstack解决update停顿
    动态代理反向
    注解的继承
    51单片机状态机键盘检测
    28335scififo中断接收与发送
  • 原文地址:https://www.cnblogs.com/limitcode/p/7845168.html
Copyright © 2020-2023  润新知