socket.io 实现简易聊天
客户端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
}
textarea{
resize: none;
}
.main1{
float: left;
}
#main{
float: left;
width: 400px;
height: 400px;
overflow-y: auto;
border: solid 1px blue;
}
.dialog{
width: 300px;
height: 50px;
margin: 20px 30px;
}
.course-btn {
width: 150px;
background-color: #00b33b;
font: 14px/40px "Helvetica Neue","Hiragino Sans GB","Segoe UI","Microsoft Yahei","微软雅黑",Tahoma,Arial,STHeiti,sans-serif;
height: 40px;
padding: 0 12px;
text-align: center;
color: #fff;
cursor: pointer;
margin-top: 20px;
border-radius: 2px;
}
.textRun{
display: none;
margin-left: 30px;
width: 300px;
}
</style>
</head>
<body>
<div class="main1">
<div class="dialog">
<input type="text" id="username" placeholder="请输入用户名">
<button onclick=dialog()>登录</button>
</div>
<div class="textRun">
<textarea name="" id="tv" cols="30" rows="10"></textarea>
<div onclick="textrun()" class="course-btn">发表评论</div>
</div>
</div> <div id="main"> </div>
<script src="js/socket.io.slim.js"></script>
<script>
var username;
function dialog () {
username = document.getElementById('username').value;
var DA = document.getElementsByClassName('dialog')[0];
if(username!='') {
socket.emit('dialog',username)
DA.style.display = 'none';
document.getElementsByClassName('textRun')[0].style.display = 'block';
}
}
function textrun () {
var text = document.getElementById('tv').value;
socket.emit('text',{name:username,text:text})
document.getElementById('tv').value = '';
}
var socket = io('http://localhost:3001') socket.on("text",function(data){
console.log(data)
var div = document.createElement('div');
var t = div.innerHTML = '<p>'+data.name+':'+data.text+'</p>';
var main = document.getElementById('main');
main.appendChild(div)
main.scrollTop = main.scrollHeight;
}) </script>
</body>
</html>
服务端:
var app = require('http').createServer();
var io = require('socket.io')(app);
var count = 0
var mapUsername = [];
function addEventLinsten(socket, event) {
socket.on(event, function(data){
for (var i in mapUsername) {
if(i){
mapUsername[i].emit(event, data)
}
}
})
}
// 连接
io.on('connection', function(socket){
count += 1
socket.num = count;
mapUsername[count] = socket
addEventLinsten(socket, 'dialog')
addEventLinsten(socket, 'text')
// 断开
socket.on('disconnect', function(){
delete(mapUsername[socket.num])
})
})
app.listen(3001);
console.log('socket 运行成功')
socket.io 实现简易聊天的更多相关文章
- Express+Socket.IO 实现简易聊天室
代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建
前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...
- Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门
前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...
- 示例:Socket应用之简易聊天室
在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...
- 使用socket.io打造公共聊天室
最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室. ...
- node及socket.io实现简易websocket双向通信
技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...
- AngularJS+Node.js+socket.io 开发在线聊天室
所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...
- node+express+socket.io制作一个聊天室功能
首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js var http=require("http ...
随机推荐
- 记一次IIS发布网站导致系统时常跳入登录页面的问题解决
服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...
- mysq带条件的分页查询数据结果错误
记一次mysql分页条件查询的结果出错: 以一张用户表为例,首先我们看表中的所有数据,注意红色框住的部分: 我们使用不带条件的分页查询来查询,数据显示是OK的: SELECT id,login_nam ...
- suse源
zypper addrepo -f http://mirrors.vbi.vt.edu/mirrors/linux/opensuse/discontinued/distribution/11.4/re ...
- 持续集成CI/CD
Gitlab+kubernetes+docker+jenkins+harbor搭建持续交付系统 http://blog.chenmiao.cf/2016/12/28/gitlab+kubernetes ...
- C# FTP操作类的代码
如下代码是关于C# FTP操作类的代码.using System;using System.Collections.Generic;using System.Text;using System.Net ...
- [GXOI/GZOI2019]宝牌一大堆
感觉比ZJOI的麻将要休闲很多啊. 这个题就是一个最优化问题,没有面子的特殊牌型可以直接用复杂度较低的贪心判掉. 有面子的话就是一个经典dp.(曾经还在ZJOI写过这个毒瘤东西 大概就是存一下对子,面 ...
- 课堂小练习(complex类)
定义一个复数类Complex,使得下面的代码能够工作: Complex c1(3,5); //用复数3+5i初始化c1: Compex c2=4.5; //用实数4.5初始化c2 c ...
- [luogu P3391] 文艺平衡树
[luogu P3391] 文艺平衡树 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区 ...
- CentOS 7上安装PGI 2017编译器
1. 安装PGI编译器 在PGI的官方网站的右上角,有一个社区免费版(Community Edition)的下载链接(GET PGI FOR FREE),根据操作系统选择合适的版本即可. 需要注意的是 ...
- javascript 判断质数
1.判断n是否为number类型,是否为整数,是否小于2: 2.若n == 2返回true: 3.从3至n的算术平方根(square)之间的奇数,如果n取余为0,则不是奇数. var isPrime ...