详解如何使用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操作ul中li的方法
May 14 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
ReactNative实现图片上传功能的示例代码
Jul 11 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
Nov 13 Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
Typescript的三种运行方式(小结)
Sep 18 Javascript
vue实现Toast组件轻提示
Apr 10 Vue.js
微信小程序实现多选功能
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执行速度全攻略(上)
2006/10/09 PHP
php smarty的预保留变量总结
2008/12/04 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
php绘制圆形的方法
2015/01/24 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
python 检查文件mime类型的方法
2018/12/08 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
称象教学反思
2014/02/03 职场文书
一年级小学生评语
2014/04/22 职场文书
工程售后服务方案
2014/06/08 职场文书
干部个人对照检查材料
2014/08/25 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
总账会计岗位职责
2015/04/02 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL