详解如何使用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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
利用jQuery实现可输入搜索文字的下拉框
Oct 23 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
Apr 30 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
Sep 06 Javascript
Angular.js中上传指令ng-upload的基本使用教程
Jul 30 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
Nov 28 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 jQuery
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
用React Native制作一个简单的游戏引擎
May 27 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
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python简易版图书管理系统
2019/08/12 Python
python实现控制台输出彩色字体
2020/04/05 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
小学师德标兵先进事迹材料
2014/05/25 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
生活小常识广播稿
2015/08/19 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
vue中div禁止点击事件的实现
2022/04/02 Vue.js