详解如何使用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 相关文章推荐
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
JavaScript正则表达式之multiline属性的应用
Jun 16 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
Sep 26 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
Node.js console控制台简单用法分析
Jan 04 Javascript
Webpack3+React16代码分割的实现
Mar 03 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
关于文本留言本的分页代码
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php多任务程序实例解析
2014/07/19 PHP
学习php中的正则表达式
2014/08/17 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
原生JS实现留言板
2020/03/26 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python中捕获键盘的方式详解
2019/03/28 Python
django如何自己创建一个中间件
2019/07/24 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
python的slice notation的特殊用法详解
2019/12/27 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
户外活动策划方案
2014/03/12 职场文书
跑操口号
2014/06/12 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
python glom模块的使用简介
2021/04/13 Python
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript