Node.js socket 双向通信

qq4535292 2019-07-22 原文


Node.js socket 双向通信


使用场景:  聊天室;大量数据常驻交互;

技术栈: Node.js,     Vue.js || 原生JS

服务端代码: 

const app = require('http').createServer()
const io = require('socket.io')(app)
app.listen(8877)

io.on('connection', scoket => {
  let i = 1
  const t = setInterval(()=>{
    i++
    if(i >= 12) {
      clearInterval(t)
    }
    // 服务端往客户端发送消息
    scoket.emit('news', { hello: 'world', t: new Date().getTime() })
  }, 1000)

  // 服务端监听客户端的消息
  scoket.on('receiveEvent', data => {
    console.log('receiveEvent: ', data)
  })
})

客户端代码: 

 — Vue 例子:

<template>
  <div>
    <p @click="clientToServer">scoket:</p>
    <p v-for="(item,index) in arr" :key="index">{{item}}</p>
  </div>
</template>

<script>
import io from 'socket.io-client'
export default {
  beforeMount() {
    // 初始化 客户端 socket
    this.socket = io('http://localhost:8877')
  },
  data() {
    return {
      arr: []
    }
  },
  mounted() {
    // 监听服务端 scoket 'news' 数据流
    this.socket.on('news', data => {
      this.arr.push(data)
    })
  },
  methods: {
    // 客户端往服务端发送消息
    clientToServer() {
      this.socket.emit('receiveEvent', 'Hi~ im from clientSide')
    }
  },
  // 销毁 socket
  beforeDestroy() {
    this.socket.close('news')
  }
}
</script>

 

— 原生代码示例: 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Socket Demo</title>
  </head>
  <body>
    <button>Send Msg</button>
  </body>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.8/socket.io.min.js"></script>
  <script>
    const wsUrl = "http://localhost:8877";
    window.onload = () => {
      const socket = io.connect(wsUrl);
      // 监听服务端消息
      socket.on("news", data => {
        console.log("news: ", data);
      });
      // 往服务端发送消息
      document.getElementsByTagName('button')[0].onclick = function() {
        socket.emit('receiveEvent', 'msg from client!')
      }
    };
  </script>
</html>

 后话(备注): 

这里是使用的 Node.js  socket.io 第三方库, 笔者尝试过 pm2 集群部署后, 因为多核心运行的特点, 导致socket会话的id出现错误, 一直没处理好, 如有大神做过类似处理, 请交流指教!!!

 

版权声明:本文为qq4535292原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qq4535292/p/11227444.html

Node.js socket 双向通信的更多相关文章

  1. 基于 Socket 实现 MicroPython 的 HTTP 上传文件(multipart/form-data)

    起因 下述内容需要具备 HTTP 的基础知识,如果不知道的可以过一遍 HTTP 协议详解 继上次在 K210 […]...

  2. 使用Peach简化Socket网络通讯协议开发

    Peach是基于DotNetty的Socket网络通讯帮助类库,可以帮助开发者简化使用DotNetty,关于D […]...

  3. 【编程】概念的理解 —— socket

    socket:A socket is something into which something is pl […]...

  4. Node.js 的回调模式

    我们都知道在javaScript中,如果在head标签里面引入script脚本,在打开web的时候,浏览器会先 […]...

  5. c++ 网络编程(八) LINUX-epoll/windows-IOCP下 socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622 […]...

  6. Solon 1.2.12 发布,新的惊喜

    Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快 […]...

  7. node 中的 stream

    什么是 stream Stream 借鉴自 Unix 编程哲学中的 pipe。 Unix shell 命令中觉 […]...

  8. VUE常见问题解决

    1.vue模板加载顺序 computed:例如分页的配置; created:dom加载前一般用来生成dom m […]...

随机推荐

  1. c++课程设计之通讯录电话簿管理设计

    功能   本程序是利用c++实现一个简单的电话簿管理。我是在Linux下利用g++直接编译的,完全可以将文件在 […]...

  2. gh-ost工具在线改表过程的详细解析

    gh-ost,是github开源的一款在线修改MySQL表结构的工具https://github.com/gi […]...

  3. 2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总

    2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总 2018-12-06 11:4 […]...

  4. 深入理解JVM(③)虚拟机的类加载器(双亲委派模型)

    前言 先解释一下什么是类加载器,通过一个类的全限定名来获取描述该类的二进制字节流,在虚拟机中实现这个动作的代码 […]...

  5. eclipse编辑工具小结 – 时间朋友

    eclipse编辑工具小结 eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉 […]...

  6. Vue.js命名风格指南

    前言 本命名风格指南推荐了一种统一的命名规范来编写 Vue.js 代码。这使得代码具有如下的特性: 统一团队的 […]...

  7. mac上的键盘生活——打字训练

    我的打字真的很有问题,错误率实在是太高了,于是乎下定决心改掉打字习惯,起码为了对得起我的机械键盘   所谓双击 […]...

  8. POJ1847

                     Tram Time Limit: 1000MS   Memory Limit […]...

展开目录

目录导航