详解如何使用koa实现socket.io官网的例子


Posted in Javascript onNovember 04, 2018

socket.io官网中使用express实现了一个最简单的IM即时聊天,今天我们使用koa来实现一下

### 框架准备

1.确保你本地已经安装好了nodejs和npm,使用koa要求node版本>7.6

2.在你需要的位置新建一个文件夹(官网的简单命名为chat-example)

3.进入项目目录,创建package.json文件:

{
 "name": "socket-chat-example",
 "version": "0.0.1",
 "description": "my first socket.io app",
 "dependencies": {}
}

4.命令行中使用npm安装,执行以下命令

npm install --save koa koa-router http fs socket.io

### 接下来直接上代码

项目目录下直接新建index.js

var Koa = require('koa');
var app = new Koa();
const Router = require('koa-router');
const fs = require('fs');
const server = require('http').createServer(app.callback());
const io = require('socket.io')(server);

// 首页路由
let router = new Router();
router.get('/', ctx => {
  ctx.response.type = 'html';
  ctx.response.body = fs.createReadStream('./index.html');
});
app.use(router.routes());

// socket连接
io.on('connection', (socket) => {
  socket.on('chat message', (msg) => {
    console.log('message: '+msg);
    io.emit('chat message', msg);
  });
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

// 监听端口
server.listen(3000, () => {
  console.log('listening on *:3000');
});

重点:

socket的连接方式是先建立server,它的获取方式不再是:

var http = require('http').Server(app);
var io = require('socket.io')(http);

而变成了:

const server = require('http').createServer(app.callback());
const io = require('socket.io')(server);

node8之后,function(){} 可以简化为 () => {},写法上更加的简洁

页面index.html

<!doctype html>
<html>
 <head>
  <title>Socket.IO chat</title>
  <style>
   * { margin: 0; padding: 0; box-sizing: border-box; }
   body { font: 13px Helvetica, Arial; }
   form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
   form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
   form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
   #messages { list-style-type: none; margin: 0; padding: 0; }
   #messages li { padding: 5px 10px; }
   #messages li:nth-child(odd) { background: #eee; }
  </style>
 </head>
 <body>
  <ul id="messages"></ul>
  <form action="">
   <input id="m" autocomplete="off" /><button>Send</button>
  </form>
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
   <script>
     $(function () {
       var socket = io();
       $('form').submit(function(){
         socket.emit('chat message', $('#m').val());
         $('#m').val('');
         return false;
       });
       socket.on('chat message', function(msg){
         $('#message').append($('<li>').text(msg));
       });
     });
   </script>
 </body>
</html>

index.html和官网的一样,不做任何改动

最后执行node index.js,打开浏览器,输入http://localhost:3000就可以实现最简单的聊天了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中的window.event.keyCode使用介绍
Apr 26 Javascript
疯狂Jquery第一天(Jquery学习笔记)
May 11 Javascript
jquery实现textarea 高度自适应
Mar 11 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
May 25 Javascript
jQuery操作基本控件方法实例分析
Dec 31 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
详解vue-cli 脚手架 安装
Apr 16 Javascript
JavaScript基础之this和箭头函数详析
Sep 05 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
three.js 制作动态二维码的示例代码
Jul 31 Javascript
微信小程序实现多选功能
Nov 04 #Javascript
微信小程序实现无限滚动列表
May 29 #Javascript
微信小程序自定义轮播图
Nov 04 #Javascript
微信小程序实现带缩略图轮播效果
Nov 04 #Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 #Javascript
微信小程序实现下拉菜单切换效果
Mar 30 #Javascript
微信小程序CSS3动画下拉菜单效果
Nov 04 #Javascript
You might like
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
微信access_token的获取开发示例
2015/04/16 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
python多线程http下载实现示例
2013/12/30 Python
python获取当前日期和时间的方法
2015/04/30 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
详解python的ORM中Pony用法
2018/02/09 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
django框架创建应用操作示例
2019/09/26 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python3代码中实现加法重载的实例
2020/12/03 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
清明节寄语2015
2015/03/23 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
详解jQuery的核心函数和事件处理
2022/02/18 jQuery