详解如何使用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 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
jQuery选择器的工作原理和优化分析
Jul 25 Javascript
js读取配置文件自写
Feb 11 Javascript
js通过location.search来获取页面传来的参数
Sep 11 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
原生js实现简单的Ripple按钮实例代码
Mar 24 Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 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中include与require使用方法区别详解
2013/10/19 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
拖动一个HTML元素
2006/12/22 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
python线程池的实现实例
2013/11/18 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
两只小狮子教学反思
2014/02/05 职场文书
大学学习计划书范文
2014/05/02 职场文书
助理政工师申报材料
2014/06/03 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python