详解如何使用koa实现socket.io官网的例子

socket.io官网中使用express实现了一个最简单的IM即时聊天,今天我们使用koa来实现一下利用 socket.io 实现消息实时推送

框架准备

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就可以实现最简单的聊天了

原文链接:https://my.oschina.net/u/3970421/blog/2998286

原文地址:https://www.cnblogs.com/thatme/p/10296485.html

时间: 2024-10-11 06:07:19

详解如何使用koa实现socket.io官网的例子的相关文章

Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO

Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO Java 非阻塞 IO 和异步 IO 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2p

详解Qt动画框架(2)--- 实现网易云音乐tag切换

在详解Qt的动画框架(一)介绍了关于Qt动画框架一些基础知识,在这一节中,将会实际的看到有关与动画框架的实现,该案例主要实现的具体是网易云音乐tag的切换,网易云音乐中的切换如图所示: 本文介绍的方法也可以达到这种切换的简易效果. 设计动画框架 首先我们需要设计对于动画框架,其需要的动画效果是什么?对于上图,我们需要的是三个tag可以不停的切换,可以抽象为左移以及右移,即一个tag从一个矩形区域,移动到另外的矩形区域,那么对于Tag的承载体选为什么较为合适呢?因为我们仅仅只需要图片的显示,因此Q

NodeJS+Express+Socket.io的一个简单例子

初始化一个NodeJS web应用: 打开CMD窗口. 运行cmd:"mkdir myapp",新建一个文件夹,名为myapp. 运行cmd:"cd myapp",切换到文件夹myapp. 运行cmd:"npm init",创建文件package.json. 3.Express入门应用: 在上面的CMD窗口运行cmd:"npm install express --save", 安装"express" nod

log4j详解(一)properties配置方式+Socket编程

     这段时间看了 Socket 编程 和 log4j 进行日志处理,打算搞一搞加深印象.代码有详细的注释.欢迎各位拍砖 =.=|||    一.步骤,简单操作 1.加入 jar 包. 2.在 src 同级创建并设置配置文件 log4j.properties 3.响应的修改其中属性,修改之前就必须知道这些用于何处. 4.在要输出日志的类中加入相关语句. 二.Log4j基本使用方法 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高

TCP/IP协议详解(二) 基于C# Socket的C/S模型建立

前一章节我提到了在Windows,LINUIX内核已经有了完整的TCP/IP实现,只要会调用专用接口函数: Socket和TLI(传输层接口)就足够了,正好我最近在了解C#,所以便通过Socket实现简单的客户端/服务器模型,程序本身并不难,不过理解了之后对于认知TCP/IP有着良好的促进作用. 想要实现Socket通讯,具体实现参考标准的流程,如下图: 了解了上图,那么就可以开始C#的编程了(窗体设计等参考源码,我主要讲解核心代码): 客户端: 客户端的实现比较简单 1.建立tcp连接(等同于

Socket.IO学习之基础入门

原文:http://blog.csdn.net/weichuang_1/article/details/48831957 这里贴出Socket.IO官网 一.Socket.IO的介绍 Socket.IO支持及时.双向与基于事件的交流.它可以在每个平台.每个浏览器和每个设备上工作,可靠性和速度同样稳定. 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户. 实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用. 二进制流传输:从1

第十三章:基于socket.io实现即时通信

服务器端的搭建参考socket io官网,里面有非常详细的描述,按照步骤下来,最终可以在localhost进行模拟聊天. 下面是客户端的说明. 引入socket.io.js: <script src="js/socket.io.js"></script> 定义Chats tab: <!-- Chats Tab --> <ion-tab title="Chats" icon-off="ion-ios-chatboxe

使用node.js和socket.io实现多人聊天室

刚学node.js,想着做点东西练练手.网上的东西多而杂,走了不少弯路,花了一天时间在调代码上.参考网上的一篇文章,重写了部分代码,原来的是基于基于node-websocket-server框架的,我没用框架,单单是socket.io. 一.基本功能 1.用户随意输入一个昵称即可登录2.登录成功后1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表3.退出登录1)支持直接退出2) 当有用户退出,其他所有在线用户会收

socket.io websocket

不能不知道的事: 在Http协议中,客户端向服务器端发送请求,服务器端收到请求再进行回应,整个过程中,服务器端是被动方,客户端是主动方: websoket是H5的一种基于TCP的新通信协议,它与Http协议的不同之处就是Websocket能实现服务器端主动推送消息到客户端,服务器端与客户端都能发起通信,实现浏览器与服务器之间的双向通信:socket.io是一个完全由js实现,基于nodejs.支持websocket的协议用于实时通讯.跨平台的开源框架,它包括客户端的js和服务器端的nodejs.