美文网首页
websocket 实时通讯

websocket 实时通讯

作者: 命题_1f6e | 来源:发表于2020-05-14 16:19 被阅读0次

websocket 作用

简单的说: 传统 http 通讯一次交互数据后就断开连接了,服务端没法主动向客户端推送信息。 而长连接的 websocket 解决了这一问题

下面会有一个简单的例子介绍 socket.io.js 的使用

github 代码地址

将上述代码下载至本地,执行下列操作

npm install express --save
npm install socket.io --save
node server.js

打开在浏览器打开 localhost , 如下效果

image image

源码分析

客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    input {
      background-color: #fff;
      background-image: none;
      border-radius: 4px;
      border: 1px solid #bfcbd9;
      box-sizing: border-box;
      color: #1f2d3d;
      font-size: inherit;
      height: 40px;
      line-height: 1;
      outline: 0;
      padding: 3px 10px;
    }
    .el-button--primary {
      color: #fff;
      background-color: #20a0ff;
      border-color: #20a0ff;
    }
    .el-button {
      display: inline-block;
      line-height: 1;
      white-space: nowrap;
      cursor: pointer;
      background: #00aac5;
      border: 1px solid #c4c4c4;
      color: #fff;
      margin: 0;
      padding: 10px 15px;
      border-radius: 4px;
      outline: 0;
      text-align: center;
    }
  </style>
</head>
<body>
  <div>
    <div id="content">
    </div>
  </div>
  <div>
    <input type="text" id="input">
    <button class="el-button el-button--primary el-button--large" type="button" onclick="say()"><span>发送消息</span></button>
  </div>
  <script src="./socket.io.js"></script>
  <script>
    // 建立连接
    var socket = io.connect('http://localhost:80');
    // 监听 message 会话
    socket.on('message', function (data) {
      let html = document.createElement('p')
      html.innerHTML = `系统消息:<span>${data.hello}</span>`
      document.getElementById('content').appendChild(html)
      console.log(data);
    });
    // 按钮点击事件
    function say() {
      let t = document.getElementById('input').value
      if (!t) return
      let html = document.createElement('p')
      html.innerHTML = `你细声说:<span>${t}</span>`
      document.getElementById('content').appendChild(html)
      socket.emit('say', { my: t});
    }
    // 监听 news 会话
    socket.on('news', function (data) {
      console.log(data);
      let html = document.createElement('p')
      html.innerHTML = `小皮咖说:<span>我知道了,你说“${data.hello}”</span>`
      document.getElementById('content').appendChild(html)
    });
    // 监听吃饭会话
    socket.on('eating', function (data) {
      console.log(data);
      let html = document.createElement('p')
      html.innerHTML = `小皮咖说:${data.hello}`
      document.getElementById('content').appendChild(html)
    });
  </script>
</body>
</html>

服务端代码

// 使用 express 框架
var app = require('express')();
var express = require("express");
var server = require('http').Server(app);
// 引入 socket.io
var io = require('socket.io')(server);
// 监听 80 端口
server.listen(80);
// 开启静态资源服务
app.use(express.static("./static"));
// io 各种事件
io.on('connection', function (socket) {
  console.log('websocket has connected')
  socket.emit('message', { hello: '欢迎链接' });
  socket.on('my other event', function (data) {
    console.log(data);
    socket.emit('message', { hello: '发送成功' });
  });
  socket.on('say', function (data) {
    console.log(data);
    if (data.my === '走,一起吃饭吧') {
      io.sockets.emit('eating', { hello: '果断走起呀!' });
      return
    }
    io.sockets.emit('news', { hello: data.my });
  });
});

作者:world_7735
链接:https://www.jianshu.com/p/725ff42c7af3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • websocket 实时通讯

    websocket 作用 简单的说: 传统 http 通讯一次交互数据后就断开连接了,服务端没法主动向客户端推送信...

  • django websocket

    .Net Core 可以使用SignalR进行实时通讯,python可以使用websocket进行通讯,下面的文章...

  • WebSocket--实时通讯(1)

    前言 在WebSocket之前,开发者完成实时通讯大抵都是求助一些‘hacks’来实现实时通讯。最流行的一种方式是...

  • Spring+WebSocket+SockJS实现实时聊天

    设计初衷是通过websocket实现网页实时通讯聊天。 工程环境:apache-tomcat-7.0.68+jdk...

  • WebSocket实现实时通讯

    WebSocket是HTML5以后基于TCP协议应用层的一种全双工实时通讯协议。注:全双工:个人了解服务器和客户端...

  • Nginx支持WebSocket反向代理

    WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webap...

  • Socket.io

    socket.io是一个跨浏览器支持WebSocket的实时通讯的JS。 http://socket.io/doc...

  • springboot下webSocket实现案例

    webSocket不仅可以实现im即时通讯,也可以用来统计实时在线客户端的数量或者实时在线用户数的数量,比起传统的...

  • Ruby实时web推送方案Faye

    Web实时推送技术介绍 WebSocket介绍 说到Web实时推送,不得不提到WebSocket。WebSocke...

  • Spring Boot + WebSocket 实时消息推送

    Websocket实时推送消息

网友评论

      本文标题:websocket 实时通讯

      本文链接:https://www.haomeiwen.com/subject/vwotohtx.html