(十一) Express 配合websocket

(一) 本节知识点

  • 讲述webSocket

  • 实现聊天室

(二) websocket讲述

  • HTTP协议是无状态的,服务器只会响应来自客户端的请求,但是它与客户端之间不具备持续连接。

  • 我们可以非常轻松的捕获浏览器上发生的事件(比如用户点击了盒子),这个事件可以轻松产生与服务器的数据交互(比如Ajax)。但是,反过来却是不可能的:服务器端发生了一个事件,服务器无法将这个事件的信息实时主动通知它的客户端。只有在客户端查询服务器的当前状态的时候,所发生事件的信息才会从服务器传递到客户端。

  • WebSocket协议能够让浏览器和服务器全双工实时通信,互相的,服务器也能主动通知客户端了。

  • WebSocket的原理非常的简单:利用HTTP请求产生握手,HTTP头部中含有WebSocket协议的请求,所以握手之后,二者转用TCP协议进行交流(QQ的协议)。现在的浏览器和服务器之间,就是QQ和QQ服务器的关系了。

(三) 在这里要使用express框架和一个包叫做socket.io 首先所有的文件必须在服务器上

  • (1) 下载socket.io这个包
npm install socket.io --save
  • (2)服务器端代码
//socket.io公式:
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on("connection",function(socket){
    socket.on("chat",function(msg){
        //把接收到的msg原样广播
        console.log(msg);
        io.emit("chat",msg); //要是socket就是点对点
    });
});
//这里千万注意是http在监听
http.listen(3000);
  • (3)客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模拟短信调用</title>

</head>
<body>
<style>
    *{margin:0px;padding:0px;}
    .container{width:1000px;height:700px;border:1px solid #ccc;border-radius: 10px;box-shadow: 5px 2px 10px #ccc;position:absolute;left:50%;top:50%;transform: translate(-50%,-50%);}
    #bottom{width:100%;height:100px;position:absolute;bottom:0px;left:0px;}
    #button1{width:20%;height:100px;text-align:center;line-height:99px;font-size:30px;position:absolute;left:0px;top:0px;}
    #text1{width:60%;height:99px;line-height:99px;position:absolute;left:20%;top:0px;font-size:55px;}
    #send{width:20%;height:100px;text-align:center;line-height:100px;font-size:30px;position:absolute;left:80%;top:0px;}
    #main{width:100%;height:600px;list-style-type: none;overflow: auto;}
</style>
<body>

<div class="container">
    <!--顶部区域-->
    <ul id="main">



    </ul>


    <!--顶部区域-->
    <!--底部开始-->
    <div id="bottom">
        <button id="button1">我说:</button>
        <input type="text" id="text1">
        <button id="send">发送</button>
    </div>
    <!--底部开始-->

</div>

</body>
<script src="js/jquery.min.js"></script>
<script type="text/javascript" src="/socket.io/socket.io.js"></script> <!--这个文件不用你引入因为服务器端现在的包里面就包含了这个文件-->
<script>
    var socket = io();
    $("#send").on("click",function(){
     var value = $("#text1").val();
        socket.emit("chat",{
            "content" : value
        })
    })

    socket.on("chat",function(msg){
        $("#main").prepend("<li><b>" + msg.content + "</b></li>");
    });
</script>
</body>
</html>

emit表示发送 on表示监听
以上就是最浅显的基于websocket的聊天室

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • WebSocket简介 谈到Web实时推送,就不得不说WebSocket。在WebSocket出现之前,很多网站为...
    吧啦啦小汤圆阅读 8,192评论 15 75
  • 还是那个可怕的问题?为什么现在追个女生,约个炮会这么简单,而想要一段可以长久的爱情却是难上加难。 很简单的一句话 ...
    我也曾手持40cm大刀阅读 212评论 0 1
  • 什么事都从细节抓起,慢慢的个人生活品质会提高,减肥也是一样需要注重细节,下面小编告诉大家一些简单的瘦小腿方法,帮助...
    有习惯阅读 532评论 0 0
  • 今天是科目三第一天,学了一大堆东西,感觉还可以吧,不算太难,就是希望考试的时候不要有突发情况。 今天回来的时候堵成...
    Floattttt阅读 92评论 0 0
  • 深夜,上床,关灯。突然想起黄佑生教授的那句“为了遇见未遇见的自己”。明天将要与我谋面,我有几分预见明天的我,但我今...
    落日有尽阅读 178评论 0 0