基于WebSocket的在线文字聊天室

这篇具有很好参考价值的文章主要介绍了基于WebSocket的在线文字聊天室。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

与Ajax不同,WebSocket可以使服务端主动向客户发送响应,本案例就是基于WebSocket的一个在线聊天室,不过功能比较简单,只能满足文字交流。演示如下。

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

案例学习于b站up主,链接 。这位up主讲的非常清楚,值得去学习。本文属于记录自我学习过程的文章。

项目目录下app.js

//导入nodejs-websocket包
const { connect } = require('net')
const ws = require('nodejs-websocket')
const PORT = 3000

//创建一个server
const server = ws.createServer(connect => {
	console.log('有用户连接上来了')
})

server.listen(PORT,() => {
	console.log('websocket服务启动成功了,监听了端口'+PORT)
})

项目目录下打开终端 

npm install nodejs-websocket

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

 下载成功后。

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

 项目目录下index.html

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

 基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

去掉css。 

app.js 

//导入nodejs-websocket包
const { connect } = require('net')
const ws = require('nodejs-websocket')
const PORT = 3000

//连接的数量
let count = 0
//创建一个server
const server = ws.createServer(connect => {
	console.log('新的连接')
	count++
	connect.userName = `用户${count}`
	broadcast(`${connect.userName}进入了聊天室`)
	//接收
	connect.on('text',data => {
		broadcast(data)
	})
	//关闭
	connect.on('close',data => {
		console.log('关闭连接')
		count--
		broadcast(`${connect.userName}离开了聊天室`)
	})
	//异常
	connect.on('error',data => {
		console.log('发生异常')
	})
})

//广播
function broadcast(msg) {
	server.connections.forEach(item => {
		item.send(msg)
	})
}

server.listen(PORT,() => {
	console.log('websocket服务启动成功了,监听了端口'+PORT)
})

 index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			
		</style>
	</head>
	<body>
		<div></div>
		<input type="text" placeholder="请输入你的内容"/>
		<button>发送</button>
		<script>
			var input = document.querySelector('input')
			var button = document.querySelector('button')
			var div = document.querySelector('div')
			
			//websocket的服务地址
			var socket = new WebSocket('ws://localhost:3000')
			//连接成功时
			socket.addEventListener('open',function() {
				div.innerHTML = '连接服务成功了'
			})
			//主动向服务器发消息
			button.addEventListener('click',function() {
				var value = input.value
				socket.send(value)
			})
			//接受数据
			socket.addEventListener('message',function(e) {
				console.log(e.data)
				var dv = document.createElement('div')
				dv.innerText = e.data
				div.appendChild(dv)
			})
			//断开连接
			socket.addEventListener('close',function(e) {
				div.innerHTML = '服务断开连接'
			})
		</script>
	</body>
</html>

浏览框1

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket 

 浏览框2

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket 

稍微美化页面,增强一下逻辑。在浏览器内打开三个窗口,既有3个人参与到聊天室中,现在可以聊天了。

 用户1基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

用户2 

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket 用户3

 主要代码

请先安装node.js并已下载websocket的环境。

项目目录:

基于WebSocket的在线文字聊天室,# javascript,javascript,前端,node.js,websocket

app.js

//导入nodejs-websocket包
const { connect } = require('net')
const ws = require('nodejs-websocket')
const PORT = 3000
const TYPE_ENTER = 0
const TYPE_LEAVE = 1
const TYPE_MSG = 2

//连接的数量
let count = 0
//创建一个server
const server = ws.createServer(connect => {
	console.log('新的连接')
	count++
	connect.userName = `用户${count}`
	broadcast({
		type: TYPE_ENTER,
		msg: `${connect.userName}进入了聊天室`,
		time: new Date().toLocaleString('chinese',{hour12:false}).slice(2).replace(/-/g,'/')
	})
	//接收
	connect.on('text',data => {
		broadcast({
			type: TYPE_MSG,
			msg: connect.userName + ':' + data,
			time: new Date().toLocaleString('chinese',{hour12:false}).slice(2).replace(/-/g,'/')
		})
	})
	//关闭
	connect.on('close',data => {
		console.log('关闭连接')
		count--
		broadcast({
			type: TYPE_LEAVE,
			msg: `${connect.userName}离开了聊天室`,
			time: new Date().toLocaleString('chinese',{hour12:false}).slice(2).replace(/-/g,'/')
		})
	})
	//异常
	connect.on('error',data => {
		console.log('发生异常')
	})
})

//广播
function broadcast(msg) {
	server.connections.forEach(item => {
		item.send(JSON.stringify(msg))
	})
}

server.listen(PORT,() => {
	console.log('websocket服务启动成功了,监听了端口'+PORT)
})

 index.html文章来源地址https://www.toymoban.com/news/detail-649853.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}
			body {
				background: #eff0fe;
				font-family: '宋体';
			}
			#box {
				padding: 20px;
			}
			input {
				width: 600px;
				height: 30px;
				border: none;
				outline: none;
				color: gray;
			}
			#chat {
				padding: 10px;
				background: white;
				width: 920px;
				box-sizing: border-box;
				height: 95vh;
			}
			#operation {
				position: fixed;
				top: 300px;
				right: 20px;
			}
			#title {
				font-size: 200px;
				position: fixed;
				top: 20px;
				right: 80px;
				color: gray;
				opacity: 0.3;
				font-family: '黑体';
			}
			button {
				height: 30px;
				width: 50px;
				text-align: center;
				line-height: 30px;
				border: none;
				color: gray;
			}
			button:hover {
				cursor: pointer;
			}
			.middle {
				width: 200px;
				margin: 0 auto;
				font-size: 3px;
				color: gray;
				margin-bottom: 5px;
			}
			.msg {
				width: 900px;
				word-break: break-all;
			}
			
		</style>
	</head>
	<body>
		<div id="box">
			<div id="chat"></div>
			<div id="title">聊天室</div>
			<div id="operation">
				<input type="text" placeholder="请输入你的内容"/>
				<button>发送</button>
			</div>
		</div>
		<script>
			const TYPE_ENTER = 0
			const TYPE_LEAVE = 1
			const TYPE_MSG = 2
			var input = document.querySelector('input')
			var button = document.querySelector('button')
			var div = document.querySelector('#chat')
			console.log(input)
			
			//websocket的服务地址
			var socket = new WebSocket('ws://localhost:3000')
			//连接成功时
			socket.addEventListener('open',function() {
				div.innerHTML = '欢迎来到聊天室'
			})
			//主动向服务器发消息
			button.addEventListener('click',function() {
				var value = input.value
				socket.send(value)
				input.value = ''
			})
			//接受数据
			socket.addEventListener('message',function(e) {
				console.log(e.data)
				var data = JSON.parse(e.data)
				if(data.type === TYPE_MSG) {
					var dv = document.createElement('div')
					var time = document.createElement('div')
					var msg = document.createElement('div')
					time.className = 'middle'
					msg.className = 'msg'
					time.innerText = data.time
					msg.innerText = data.msg
					dv.appendChild(time)
					dv.appendChild(msg)
				} else {
					var dv = document.createElement('div')
					var msg = document.createElement('div')
					var time = document.createElement('div')
					msg.className = 'middle'
					time.className = 'middle'
					msg.innerText = data.msg
					time.innerText = data.time
					dv.appendChild(time)
					dv.appendChild(msg)
				}
				div.appendChild(dv)
			})
			//断开连接
			socket.addEventListener('close',function(e) {
				div.innerHTML = '服务断开连接'
			})
		</script>
	</body>
</html>

到了这里,关于基于WebSocket的在线文字聊天室的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Gin+WebSocket实战——在线聊天室WebSocketDemo详细使用教程

    Github:https://github.com/palp1tate/WebsocketDemo 欢迎star!😎 利用 Gin + WebSocket 实现的在线聊天室 Demo 项目,支持加入/离开聊天室广播、给其他用户发送消息等。 进入项目根目录,执行命令 go run . 命令,结果如下: 可以看到们的 HTTP 服务已经启动成功并运行在了 8080 端口上。 接下

    2024年04月26日
    浏览(16)
  • 基于springboot与websocket实现简易聊天室

    创建一个简单聊天室的HTML和JavaScript代码,匹配相应的css样式,这个聊天室将使用WebSocket技术,允许用户实时发送和接收消息。 1.1 html和js代码 通过new WebSocket(url)建立一个新的websocket连接。websocket连接建立之后使用websocket.onopen,websocket.onclose,websocket.onerror等方法实时监测we

    2024年02月01日
    浏览(28)
  • 【项目设计】基于WebSocket的Web聊天室

    本项目的名称为Web聊天室,即类QQ群组聊天,多个用户可以在同一个群组收发消息进行聊天 项目实现的业务 注册功能:用户输入账号,密码,昵称,图像点击即可注册用户(账号和昵称不能重复) 登陆功能:用户输入账号,密码即可进行登陆(如果登陆的账号已在别处登陆

    2023年04月18日
    浏览(40)
  • 基于WebSocket的简易聊天室的基本实现梳理

    目前在很多网站为了实现推送技术所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信

    2024年02月11日
    浏览(18)
  • C语言实现--基于UDP的多人在线聊天室

    目录 实现功能 实现思想 实现代码(部分及详解) 服务端部分代码 客户端部分代码 实现效果 项目中出现的问题和解决方法 项目整体代码展示 代码优化思路 服务端代码 客户端代码 服务端可以同时连接多个客户端; 新的客户端连接服务端时,可以在服务端显示自己的名字并

    2024年02月04日
    浏览(22)
  • websocket项目 聊天室

    1.项目概述 这个项目是一个基本的实时聊天应用,适用于小型团队或群体。提供了多个聊天室供用户选择。可以通过该代码进行进一步的扩展和定制,例如添加聊天机器人、改进界面等。 2.技术栈 flask,boostrapt,websocket,twemoji 3.项目结构 4.关键特点 Web框架: 项目使用 Flask

    2024年01月20日
    浏览(21)
  • websocket网页聊天室

    实现websocket网页聊天室可以遵循以下步骤: 创建一个基于浏览器的WebSocket客户端,使用JavaScript。可以使用HTML5的WebSocket API。 编写服务器端的WebSocket应用程序,可以使用Node.js和WebSocket模块。 在服务器端创建一个WebSocket服务器,监听客户端请求,并将客户端与服务器端连接起

    2024年02月06日
    浏览(20)
  • Django实现websocket聊天室

    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器双向通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变

    2023年04月23日
    浏览(20)
  • 【WebSocket】SpringBoot整合WebSocket实现聊天室(一)

    目录 一、准备 1、引入依赖 2、创建配置类 二、相关注解 首先我们需要在项目中引入依赖,有两种方式。第一种我们可以在创建Spring Boot项目时搜索WebSocket然后勾选依赖 第二种是我们可以直接在项目的pom.xml文件中插入以下依赖 我们需要进行如下配置 ServerEndpointExporter 是一个

    2024年02月13日
    浏览(21)
  • django websocket实现聊天室功能

    注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django 3.2.4 channels 3.0.3 Django 3.2.* channels 3.0.2 Django4.2 channles==3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是wsgi ,修改,删除settings中的wsgi,都不能正确运

    2024年01月22日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包