客户端:

<!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 实现简易聊天的更多相关文章

  1. Express+Socket.IO 实现简易聊天室

    代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...

  2. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

  3. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  4. Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门

    前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...

  5. 示例:Socket应用之简易聊天室

    在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...

  6. 使用socket.io打造公共聊天室

    最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室. ...

  7. node及socket.io实现简易websocket双向通信

    技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...

  8. AngularJS+Node.js+socket.io 开发在线聊天室

    所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...

  9. node+express+socket.io制作一个聊天室功能

    首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js var http=require("http ...

随机推荐

  1. 外排序 External sorting

    2019-04-17 18:11:34 外排序(External sorting)是指能够处理极大量数据的排序算法.通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘) ...

  2. haproxy keepalived和nodejsv9的容器镜像所需文件

    配合hub.docker.com 的dablyo/haproxy-keepalived-nodejsv9:190407 使用的 [root@haproxy ~]# cat haproxy.cfgglo ...

  3. Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet

    一个地图上有若干障碍,问允许出现一个障碍的最大子矩形为多大? 最大子矩形改编 #include<bits/stdc++.h> using namespace std; #define re ...

  4. lockable JS function,解锁操作之前,不能重复操作

    (function () { var ed = []; window.Lockable = function (lockF, options) { if (!arguments.length) { v ...

  5. vue 移动端轻量日期组件不依赖第三方库

    Vue版移动端日期选择组件 1.优点:不需要依赖其他第三方库,灵活可配置: 不需要依赖第三方组件的vue日期移动端组件  小轮子 轻量可复用:  https://github.com/BeckReed ...

  6. 牛客网暑期ACM多校训练营(第七场)Bit Compression

    链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...

  7. spark 2.4 java8 hello world

    download JDK 8, extract and add to .bashrc: export JAVA_HOME=/home/bonelee/jdk1.8.0_211export CLASSP ...

  8. Linux Shell基线配置高级操作

    一.输入解析类 1.1 echo解析tab和换行 问题描述:echo默认是原样输出字符串,并不解析\t和\n等反斜杠字符,如下图所示.我们希望echo能解析\t和\n等字符. 处理办法:可以使用-e指 ...

  9. 浏览器如何对HTML5的离线储存资源进行管理和加载

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储.如果已经访 ...

  10. Ubuntu系统建立交叉编译环境

    飞凌 FET6818核心板 解压编译器: tar zxvf arm-cortex_a9_eabi-4.7-eglibc-2.18.tar.gz  -C/opt 设置默认编译环境: vi /etc/pr ...