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 ...
随机推荐
- sparkSQL脚本更改问题
相应的pom依赖文件 <dependencies> <!-- <dependency> <groupId>org.apache.storm</group ...
- leecode第二百一十七题(存在重复元素)
class Solution { public: bool containsDuplicate(vector<int>& nums) { set<int> s; for ...
- Python交互K线工具 K线核心功能+指标切换
Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...
- JSP+MySQL最简单的登录和注册的实现 --Java Web温习
一.开发环境 开发工具:eclipse 2018-09 操作系统:win10 二.实现 1.目录结构: 2.数据库(创建tmp数据库,新建user表,user表结构如下) 3.功能简介 功能比较简单, ...
- nameode启动过程
namenode在内存和磁盘中都保存了fsimage和edits文件 内存中保证hdfs文件系统的访问效率,磁盘中保证hdfs文件系统的安全性 namenode的文件组成: fsimage文件:保存文 ...
- 树莓派 连接 JY901(MPU9250) python 代码
先说BUG,最近要做项目需要树莓派和陀螺仪,资金充足的话肯定是买一个硬件卡尔曼滤波的传感器类似JY901模块,资金不足的就买MPU6050. 网上关于MPU6050在树莓派上的代码还能用,关于JY90 ...
- WSGI 的简单理解
WSGI是Web Server Gateway Interface(Web服务器网关接口)的缩写.其位于web应用程序与web服务器之间.python标准库提供的独立WSGI服务器称为wsgiref. ...
- angular学习笔记(3)
一.angular的核心 1.组件 2.指令 3.服务 4.依赖注入
- idea 中add configuration
记住:点击“+”号配置tomcat 第一步当然先得建一个web项目 1.file -> new -> project -Next -> Finish -项目建好了接下来就是配置了 - ...
- shell脚本学习之case用法及实例
case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ;;为止 ...