客户端:

<!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. 改变选择文字的color及background-color

    在一些特殊的网站中,常常会有着一些新奇的体验,在阅读网页的时候相信许多人都会和我一样有着一个习惯,把一些文字选中然后进行阅读,或者时要复制粘贴的时候选择文字对吧.然而无论是在ie,chrome,fir ...

  2. 两两交换链表中的节点(java实现)

    题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...

  3. JavaScript如何生成思维导图(mindmap)

    JavaScript如何生成思维导图(mindmap) 一.总结 一句话总结:可以直接用gojs gojs 二.一个用JavaScript生成思维导图(mindmap)的github repo(转) ...

  4. Fragment调用startActivityForResult导致的回调Activity无法获取正确的requestId的问题

    今天遇到了一个问题 从Fragment内调用了startActivityForResult方法设置了requestId是1 但是在Activity内的onActivityResult的回调内 获得的r ...

  5. Android Satudio的使用记录

    Satudio的使用记录之导入新项目: Satudio导入项目的心得[基本分为4步完成]1.需要保证自己的satudio中项目能够运行,同时找到该工作空间的和项目的各个参数 {项目-->右键—— ...

  6. Python的类的下划线命名的区别

    首先,单下划线开头,这个常被用于模块中,在一个模块中以单下划线开头的变量和函数被默认当做内部函数,如果使用from  module  import  *导入时,这部分变量和函数不会被导入.注意,如果使 ...

  7. 20165309 《网络对抗技术》 Kali安装

    20165309 <网络对抗技术> Kali安装 1. 目的要求 下载 安装 网络 共享 软件源 2. 主要步骤 下载系统镜像文件 进入Kali官网下载,我选择的是64位版本: 虚拟机设置 ...

  8. c++连续读取未知个数的数字

    #include <iostream> using namespace std; int main() { int n; ]; ,count=; while(cin>>n){ ...

  9. jquery等待特定元素加载再执行相关函数

    jQuery.fn.wait = function (func, times, interval) { var _times = times || 100, //100次 _interval = in ...

  10. EF6中执行Sql语句

    EF中提供了两个方法,一个是执行查询的Sql语句SqlQuery,另外一个是执行非查询的语句ExecuteSqlCommand.SqlQuery有两种形式的,一种是泛型的,一种是非泛型的.比如我们要在 ...