详解如何使用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 for循环设法提高性能
Feb 24 Javascript
JQuery实现级联下拉框效果实例讲解
Sep 17 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
JS中substring与substr的用法
Nov 16 Javascript
解析JavaScript模仿块级作用域
Dec 29 Javascript
Express的HTTP重定向到HTTPS的方法
Jun 06 Javascript
使用layer弹窗和layui表单实现新增功能
Aug 09 Javascript
JQuery常见节点操作实例分析
May 15 jQuery
微信小程序实现手势滑动效果
Aug 26 Javascript
layui输入框中只允许输入整数的实现方法
Sep 18 Javascript
layui表格设计以及数据初始化详解
Oct 26 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
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
Vue.js实现的购物车功能详解
2019/01/27 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
python发送HTTP请求的方法小结
2015/07/08 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
如何在python中写hive脚本
2019/11/08 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
Python实现自动整理文件的脚本
2020/12/17 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
教育学习自我评价
2014/02/03 职场文书
高中历史教学反思
2014/02/08 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
小学生通知书评语
2014/12/31 职场文书
公司更名通知函
2015/04/24 职场文书
社区服务理念口号
2015/12/25 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Mysql数据库命令大全
2021/05/26 MySQL
node快速搭建后台的实现步骤
2022/02/18 NodeJs
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python