egg-socket.io 的使用

官方文档看这里 egg-socket.io

接下来的内容其实与文档里差不多,介意的童鞋略过就好,目前只是简单的引入,下周往后会写复杂些的逻辑,在后面的文章会介绍。

贴下目录结构

  

1. 下载安装

  1. cnpm install --save egg-socket.io

2. 开启插件以及插件配置

开启插件

  1. // app/config/plugin.js
  2. exports.io = {
  3. enable: true,
  4. package: 'egg-socket.io'
  5. };

插件配置

  1. // app/config/config.default.js
  2. // 这里的 auth 以及 filter 是待会会编写的两个中间件,用于不用依据自己的情况选择即可
  3. exports.io = {
  4. namespace: {
  5. '/': {
  6. connectionMiddleware: [ 'auth' ],
  7. packetMiddleware: [ 'filter' ],
  8. }
  9. }
  10. };

3. 编写中间件

  1. // app/io/middlewware/auth.js
  2. // 这个中间件的作用是提示用户连接与断开的,连接成功的消息发送到客户端,断开连接的消息在服务端打印
  3. module.exports = app => {
  4. return function* (next) {
  5. this.socket.emit('res', 'connected!');
  6. yield* next;
  7. console.log('disconnection!');
  8. };
  9. };
  10.  
  11. // app/io/middleware/filter.js
  12. // 这个中间件的作用是将接收到的数据再发送给客户端
  13. module.exports = app => {
  14. return function* (next) {
  15. this.socket.emit('res', 'packet received!');
  16. console.log('packet:', this.packet);
  17. yield* next;
  18. };
  19. };

4. 编写控制器

  1. // app/io/controller/chat.js
  2. // 将收到的消息发送给客户端
  3. module.exports = app => {
  4. return function* () {
  5. const self = this;
  6. const message = this.args[0];
  7. console.log('chat 控制器打印', message);
  8. this.socket.emit('res', `Hi! I've got your message: ${message}`);
  9. };
  10. };

5. 编写路由

  1. // app/router.js
  2. // 这里表示对于监听到的 chat 事件,将由 app/io/controller/chat.js 处理
  3. module.exports = app => {
  4. app.io.of('/').route('chat', app.io.controllers.chat);
  5. };

tip:

在业务结束时 发送消息

  1. // app/controller 中
  2. async send() {
  3. const { ctx, app } = this;
  4. const nsp = app.io.of('/');
  5.  
  6. let msg = '{"id":2, "message":666}'
  7.  
  8. let data = await JSON.parse(msg)
  9.  
  10. // app.io.controllers.chat(msg)
  11. nsp.emit('chat', data);
  12. return ctx.body = 'hi, egg';
  13. }

vue-socket.io 的使用

1. 下载

  1. cnpm install --save vue-socket.io
    cnpm install --save socket.io-client

如果出现页面显示不出来,或者出现  TypeError: Cannot call a class as a function

可以尝试把依赖 替换成   "vue-socket.io": "^2.1.1-a"

2. 连接服务器,以及接收服务端消息

  1. // src/main.js
  2. import VueSocketio from 'vue-socket.io';
    import socketio from 'socket.io-client';
  3.  
  4. Vue.use(VueSocketio, socketio('http://127.0.0.1:7001/'));
  5.  
  6. new Vue({
  7. el: '#app',
  8. router,
  9. template: '<App/>',
  10. components: { App },
  11. sockets: {
  12. connect: function () {
  13. console.log('socket connected');
  14. },
  15. res: function (val) {
  16. console.log('接收到服务端消息', val);
  17. }
  18. }
  19. });

Vue.use()里面的 url 是你服务器地址。

connect 是 http://socket.io 默认的事件,看这名字就知道是干啥的了,另外一个 res 是自定义的监听事件,表示监听服务端发送的名为 res 的事件。

3. 向服务端发送消息

  1. <script>
  2. // ...
  3. methods: {
  4. sendMessageToServer: function() {
  5. this.$socket.emit('chat', '111111111111');
  6. }
  7. }
  8. </script>

这里我们使用的事件名为 chat,所以服务端会将这条消息交给 chat.js(就是上面服务器端项目里面的文件啦) 这个控制器处理。

备注

项目部署到生产环境总是会出现各种各样的错误

nodejs+socket.io用nginx反向代理提示400 Bad Request-nginx反向代理nodejs

问题描述:在项目中引用Socket.Io,在项目部署后报错,本地运行不报错

错误原因:需要在配置文件nginx.conf中配置相关信息

解决方案:

在nginx文件的location中添加

  1. proxy_http_version 1.1;
  2. proxy_set_header Upgrade $http_upgrade;
  3. proxy_set_header Connection "upgrade";

第一行告诉Nginx在与Node后端通信时使用HTTP / 1.1,这是WebSockets所必需的。接下来的两行告诉Nginx响应升级请求,当浏览器想要使用WebSocket时,该请求由HTTP启动。这三行都是必须添加的。

例如:

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server;
  4. server_name localhost;
  5. root /usr/share/nginx/html;
  6.  
  7. # Load configuration files for the default server block.
  8. include /etc/nginx/default.d/*.conf;
  9.  
  10. location / {
  11. proxy_pass http://localhost:3100;
  12. proxy_http_version 1.1;
  13. proxy_set_header Upgrade $http_upgrade;
  14. proxy_set_header Connection "upgrade";
  15. proxy_set_header Host $host;
  16. }
  17. }

参考链接

github

vue-socket.io 及 egg-socket.io 的简单使用的更多相关文章

  1. socket编程报异常java.io.EOFException

    一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据 但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常: java.io.EOFException at java.io.DataI ...

  2. Linux Network IO Model、Socket IO Model - select、poll、epoll

    目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...

  3. oracle数据库登录连接很慢;kettle连接oracle 报 IO 错误,socket time out 问题解决记录

    问题描述: 1:oracle数据库连接登陆时突然变得很慢:sqldeveloper链接数据库很慢: 2:Kettle-spoon etl程序访问数据库,任务执行时报 :数据库连接 IO错误 :Sock ...

  4. socket.io 中文手册 socket.io 中文文档

    socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on('connec ...

  5. Socket.io文字直播聊天室的简单代码

    直接上代码吧,被注释掉的主要是调试代码,和技术选型的测试代码 var app = require('express')(); var server = require('http').Server(a ...

  6. JAVA IO总结及socket简单实现

    为了方便理解与阐述,先引入两张图: a.Java IO中常用的类 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writ ...

  7. IO多路复用丶基于IO多路复用+socket实现并发请求丶协程

    一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...

  8. (转)Linux Network IO Model、Socket IO Model - select、poll、epoll

    Linux Network IO Model.Socket IO Model - select.poll.epoll  原文:https://www.cnblogs.com/LittleHann/p/ ...

  9. socket互传对象以及IO流的顺序问题

    UserInfo.java package com.company.s6; import java.io.Serializable; public class UserInfo implements ...

  10. 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

随机推荐

  1. Jedis 常用API使用

    使用Jedis操作Redis常用的API <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <depen ...

  2. Actor 模型中的通信模式

    在 Actor 模型中所有的 Actor 之间有且只有一种通信模式,那就是 tell 的方式,也就是 fire and forget 的方式.但是在实际的开发过程中工程师们逐渐总结出了一些常用的通信模 ...

  3. .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架

    之前是使用NLog直接将日志发送到了ELK,本篇将会使用Docker搭建ELK和kafka,同时替换NLog为Log4net. 一.搭建kafka 1.拉取镜像 //下载zookeeper docke ...

  4. 十大排序算法JavaScript实现总结

    花费了几周的时间断断续续的练习和模仿与使用JavaScript代码实现了十大排序算法. 里面有每种算法的动图和静态图片演示,看到图片可以自己先按照图片的思路实现一下. github中正文链接,点击查看 ...

  5. 防DOS攻击-网络连接法

    #!/bin/bash netstat -antup | grep SYN_RECV | awk '{print $5}' |awk -F: '{print $1}'|sort|uniq -c > ...

  6. MySql5.5安装步骤及MySql_Front视图配置

    一.下载文件 有需要的朋友,请自行到百度云下载 链接:https://pan.baidu.com/s/13Cf1VohMz_a0czBI05UqJg 提取码:cmyq 二.安装MySql 2.1.运行 ...

  7. 手把手带你利用Ribbon实现客户端的负载均衡

    之前的文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者通过Ribbon调用服务实现负载均衡的过程. 本文目录 一.Ribbon服 ...

  8. MySql自定义函数-关于保留小数位的特殊需求

    背景 昨天,关于价格详情接口又来了一个小需求,而且有点特别.价格显示:改为保留两位小数,没错,就是保留两位小数.大家是不是想说这没啥特别的...数据库都有函数搞定了.例如四舍五入的ROUND(x,d) ...

  9. 10个值得深思的_PHP_面试问题

    Q1 第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\"&q ...

  10. 将jar包发布到maven的中央仓库细节整理

    在学习springboot框架的时候,会引入各种各样的starter依赖,照着教程尝试写了个demo-spring-boot-stater,可以理解为一个组件,随引随用 但是只能自己引用,无法共享,于 ...