详解如何使用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 相关文章推荐
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
jQuery内容过滤选择器用法分析
Feb 10 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
Vuejs第十三篇之组件——杂项
Sep 09 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
three.js 入门案例详解
Jan 23 Javascript
详解封装基础的angular4的request请求方法
Jun 05 Javascript
layui之数据表格--与后台交互获取数据的方法
Sep 29 Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 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自动重命名文件实现方法
2014/11/04 PHP
php查询whois信息的方法
2015/06/08 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
小程序实现搜索框
2020/06/19 Javascript
Python 函数基础知识汇总
2018/03/09 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Python 实现数组相减示例
2019/12/27 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Django视图、传参和forms验证操作
2020/07/15 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
小学生国旗下演讲稿
2014/04/25 职场文书
师德师风自查材料
2014/10/14 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
学生逃课检讨书
2015/02/17 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
彻底理解golang中什么是nil
2021/04/29 Golang
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript