【JS】WebSocket实现简易聊天室

【JS】WebSocket实现简易聊天室

聊天室思路

聊天室思路

1、连接服务器先建立连接,默认生成匿名用户(admin01)

2、客户端发送消息,其它客户端用户都会同步接收消息(服务端接受消息广播所有连接用户)

3、客户端修改昵称,其它客户端用户都会同步接收消息(服务端接受消息广播所有连接用户)

4、第2和第3的区别为消息类别不同

示例

  • index.html
javascript 复制代码
<body>
	<div class="container">
		<h1>实现简易聊天室</h1>
		<!--消息展示框-->
		<ul class="msgList">
			<!-- 			<li>
				<div class="user_msg">
					<span>张三</span>
					<label>用户上线</label>
				</div>
			</li>
			<li>
				<span class="user_notice">用户张三昵称修改为李四</span>
			</li> -->
		</ul>
		<!--发送消息-->
		<div class="message_box">
			<input type="text" id="message" placeholder="请输入内容" autofocus />
			<button id="send">发送消息</button>
		</div>
		<!--修改昵称-->
		<div class="message_modify">
			<input type="text" id="modifyName" placeholder="请输入修改昵称" />
			<button id="modify">修改</button>
		</div>
	</div>
	<script src="index.js">
	</script>
</body>
  • index.js
javascript 复制代码
window.onload = function() {
		//选择器封装
		let selector = name => document.querySelector(name);
		let createEl = dom => document.createElement(dom);
		//连接服务器先建立连接,需要客户端和服务端进行握手连接,连接成功后才能相互通讯
		var ws = new webSocket("ws://127.o.0.1:8090");
		//实例对象的 onopen属性,用于指定连接成功后的回调函数。
		ws.onopen = function() {
			alert('连接成功')
		};
		//连接发生错误的回调方法
		ws.onerror = function() {
			alert('连接失败')
		};
		//实例对象的 onmessage属性,用于指定收到服务器数据后的回调函数
		ws.onmessage = function(data) {
			let msg = jSON.parse(data.data);
			//显示消息
			appendLog(msg)
		};

		//显示消息
		function appendLog({
			type,
			nickname,
			message
		}) {
			let [msglist, elLi, str] = [selector(".msglist"), createEl("li")];
			if (type == "message'){//普通消息
				str =
				`<div class="user_msg">
					<span>${nickname}</span>
					<label>${message}</label>
				</div>`
			}
			else if (type == 'notification' || type == 'nick_update') { //系统通知消息
				str = `<span class="user_notice">${message}</span>`;

			};
			if (str) {
				elLi.innerHTML = str;
				msgList.appendChild(elLi);
			}
		};

		//消息发送
		selector("#send").onclick = function() {
			let inputMsg = selector(" #message");
			if (ws.readyState == webSocket.OPEN) {
				ws.send(inputMsg.value)
			};
			inputMsg.value = ''; //清空
		};
		//修改昵称
		selector("#modify").onclick = function() {
			let inputMsg = selector(" #modifyName"
				');
				if (ws.readystate == webSocket.OPEN) {
					//nick_${inputMsg.value}这里具体服务端让你写什么你们具体沟通
					ws.send(`/nick_${inputMsg.value}`)
				}; I
			}
		}
相关推荐
峥嵘life4 小时前
Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结
android·开发语言·人工智能·php
mqiqe7 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
gugucoding7 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g8 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
for_ever_love__8 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
谢慧琼8 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
依然鸣9 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
byxdaz9 小时前
QT中服务使用
开发语言·qt
库玛西10 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试