【自己的整理】socket.io官方demo|创建简单的聊天应用
来源:互联网 发布:js精粹 编辑:程序博客网 时间:2024/05/29 07:23
socket.io官方demo|创建简单的聊天应用
在socket.io官网上看到了一个很简单的demo应用,自己也跟着做了一遍,并留作纪念。
顺序
首先要在正式工作之前确保已经安装了Node.js
然后要安装express及其依赖项
我们先在服务器里创建一个文件夹名字为chat
选择到这个chat文件夹里面,创建一个package.json,内容为
{ "name": "socket聊天示例", "version": "0.0.1", "description": "我的第一个socket.io应用", "dependencies": {}}
为了方便起见,用npm install --save
安装express及其依赖项目,这里用的是4.15.2版本: npm install --save express@4.15.2
然后我们创建一个新的js文件’index.js’,编辑它,index.js文件内容为:
var app = require('express')();var http = require('http').Server(app);app.get('/',function(req,res){ res.send('<h1>hello world</h1>');});http.listen(3000,function(){ console.log('监听端口: xxx.xxx.xxx.xxx:3000');});
保存文件,用node index.js
运行之后在浏览器端中输入ip/域名+端口就能看到页面输出了一个hello world。
当然直接输出的方式并不方便,那么下面用路由的方式来显示一个简单的聊天页面
将index.js进行修改
app.get('/', function(req, res){res.sendFile(__dirname + '/index.html');});
这样应用就变成了发送一个文件,__dirname代表的是绝对路径,index.html放在和index.js相同的文件夹下面。
之后我们再创建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>发送</button> </form> </body></html>
重新启动index.js输入ip与端口号之后就可以显示一个雏形的聊天页面:
显示是成功了,但是这个页面并没有发送消息并且共享消息的功能。要加入这样的功能,我们先安装socket.io
npm install --save socket.io
安装完成之后,文件夹中会多出一个node_modules文件夹。
然后将index.js做一些修改:
var app = require('express')();var http = require('http').Server(app);var io = require('socket.io')(http);app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html');});io.on('connection', function(socket){ console.log('一个用户建立了连接');});http.listen(8899, function(){ console.log('监听端口:xxx.xxx.xxx.xxx:8899');});
修改index.html文件,在</body>
之前加入:
<script src="/socket.io/socket.io.js"></script><script> var socket = io();</script>
重启index.js再次连接,在服务端就可以看到用户接入的信息
到目前为止,只是实现了用户访问网页的时候可以通知服务端用户建立了连接,但是没有实现消息的发送与转发。我们需要再次修改index.js
var app = require('express')();var http = require('http').Server(app);var io = require('socket.io')(http);app.get('/',function(req,res){ res.sendFile(__dirname + '/index.html');});io.on('connection',function(socket){ console.log('一个用户建立了连接'); socket.on('disconnect',function(){ console.log('用户断开连接'); }); //服务器端接收的chat message事件 socket.on('chat message',function(msg){ console.log('message:'+msg); io.emit('chat message',msg); });});http.listen(8899,function(){ console.log('监听端口:xxx.xxx.xxx.xxx:8899');});
同时客户端的页面也需要做一些改动:将html页面的脚本做一下改动,这里用到了jquery:
<script src="http://code.jquery.com/jquery-latest.js"></script><script src="/socket.io/socket.io.js"></script><script> $(function(){ var socket = io(); $('form').submit(function(){ socket.emit('chat message',$('#m').val()); $('#m').val(''); return false; }); //客户端发送的chat message 事件 socket.on('chat message',function(msg){ $('#messages').append($('<li>').text(msg)); window.scrollTo(0,document.body.scrollHeight); }); });</script>
自此再重新启动node.js并且访问页面,就可以发送信息了。两个页面,其中一个页面发送的消息另外一个页面也会收到,服务器端效果:
客户端效果:
自此socket.io的最简单的聊天demo就搭建完成了。
- 【自己的整理】socket.io官方demo|创建简单的聊天应用
- 基于Node.js + socket.io实现WebSocket的聊天DEMO
- 基于Vue、Nodejs、Socket.io的聊天应用
- 使用Express + Socket.io + MongoDB实现简单的聊天
- 如何理解socket.io官网上创建聊天室的demo
- 使用ServerSocket、Socket创建一个简单的服务聊天程序
- ///根据环信官方文档集成EaseMobSdk的文本聊天的简单Demo
- 高并发MINA框架,网络编程(SOCKET)实现,简单的网络聊天DEMO
- 简单的聊天界面demo FaceChatDemo
- Aio--Java异步IO的 Socket Demo
- Aio--Java异步IO的 Socket Demo
- Aio--Java异步IO的 Socket Demo
- Aio--Java异步IO的 Socket Demo
- android的聊天中socket的应用
- Android 基于Socket的聊天应用(二)
- socket.io系列二 聊天应用
- 简单的多人聊天(C#.Socket).
- 简单的多人聊天(C#.Socket).
- (递归版)输入一个正整数n,输出其反序数
- qsort函数、sort函数 (精心整理篇)
- リスクを下げる方法
- 参数传递
- 解决tomcat占用8080端口问题图文教程
- 【自己的整理】socket.io官方demo|创建简单的聊天应用
- JDK动态代理实现原理
- 排序算法
- Waiting for .../output/faster_rcnn_end2end/voc_2007_trainval/VGGnet_fast_rcnn_iter_70000.ckpt
- SDUToj
- Android 使用librtmp推流【推流接口调用模块】
- 计算机网络笔记
- 文章标题
- Java 工程师岗位要求(支付)