如何用http+websocket创建一个简单的聊天室

如何用http+websocket创建一个简单的聊天室

了解一下什么是websocket???

websocket 是一种在单个TCP链接上进行双全共通信的协议。

对于通信协议大家可能第一时间想到就是HTTP协议,这里大家就会有一个疑问,我们已经学过了HTTP通信协议为什么还要来学习websocket呢??

嘿嘿,因为HTTP协议有一个缺陷,它的通信依赖于客户端用户的发起请求,然后服务器才能响应请求。而websocket协议弥补了这一个缺陷,它是双全通信,它的通信可以是客户端发起,也可以是服务器发起推送。

举个栗子,大家都有用过QQ或者微信等聊软件,当你向朋友发送一条信息,你的朋友不管有没有在玩手机,他的手机都会收到你发送的那条消息(但这里大家不要认为我和朋友之间是直接进行通信的哟,这里还有一个中间人—服务器),这就是服务器把你发送的消息推送给你的朋友。

在这里插入图片描述

下面是一个聊天室的相关代码:(http+websocket)

对websocket不是很了解的伙伴点击这里WebSocket 教程 - 阮一峰的网络日志 (ruanyifeng.com)

后端代码:

(我这里使用的是node搭建的后台,这里需要下载websocket依赖 npm i websocket --save-dev

// 1、引入http模块,搭建http服务器,
var http = require('http')
var server = http.createServer();

// 2、这里我们监听3000端口,如果该端口被占用,可以换成其他的端口
server.listen(3000,function(){
	console.log("3000端口已经启动.....")
})
//3、引入websocket,搭建websocket服务器,websocket服务器是建立在http服务器之上的
var WebSocket = require('websocket').server;
var wsServer = new WebSocket({httpServer:server});
//4、监听连接请求,建立连接
var client = [];//用来存储连接的客户端
wsServer.on('request',function(webSocketRequest){
	//当前连接 回话
	var connection = webSocketRequest.accept(null,'accepted-origin');//第一个参数是子协议,没有就填null
	client.push(connection);//connection表示当前用户,每一连接形成就会有一个用户
	//监听客户端传递过来的信息
	connection.on('message',function(msg){//这里的msg包含两个属性,一个是type,一个是data
		if(msg.type == 'utf8')
		{
			//向客户端推送消息
			//connection.sendUTF(msg.utf8Data);这里是给当前用户推送,
			client.forEach(function(item){
				item.sendUTF(msg.utf8Data);
			})
		}
	})
//5、监听用户断开连接
	connection.on('close',function(reasonCode,description){
		//获取当前断开用在client里的索引值
		var index = client.indexOf(connection);
		//将该用户移除client数组
		client.splice(index,1);
	})
})


客户端
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>多终端通信</title>
	</head>
	<body>
		<ul id="content"></ul>
		<input type="text" name="" id="msg" value="" />
		<input type="button" id="btn" value="发送"/>
	</body>
    <script src = '01.js'></script>
</html>

window.onload = function(){
	//首先获取标签
	var ul = document.getElemetById('content');
	var input = document.getElementById('msg');
	var btn = document.getElementById('btn');
	
	//创建一个websocket对象,该对象有两个值一个url,一个是子协议(不是必填)
	var ws = new WebSocket('ws://127.0.0.1:3000')
	//监听服务器端推送的消息
	ws.onmessage = function(res){
		//将信息添加到ul中显示
		ul.innerHTML += `<li>${res.data}</li?`
	}
	//给btn绑定点击事件
	btn.onclick = function(){
		//获取信息向服务器发送信息
		var value = input.value;
		if(value.trim == '')
		{
			alert('输入的信息不能为空');
			return;
		}
		ws.send(value)
	}
}

运行结果:(没有写样式,页面很简单)

在这里插入图片描述

以上就是用http和websocket创建一个多人聊天的小案列,如果对大家用微不足道的帮助,也是我的荣幸,希望各位看官点赞收藏~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建聊天系统可以使用 ASP.NET、AJAX 和 WebSocket 技术。下面是一些基本步骤: 1. 创建 ASP.NET 网站并添加 ASPX 页面。 2. 在 ASPX 页面中添加 AJAX 控件,例如 ScriptManager 和 UpdatePanel 控件,以便使用 AJAX 技术实现异步交互。 3. 在 ASPX 页面中添加 WebSocket 控件,例如 WebSocketManager 和 WebSocket 控件,以便使用 WebSocket 技术实现实时双向通信。 4. 编写服务器端代码以处理 AJAX 和 WebSocket 请求,并在客户端代码中发送请求。 5. 实现聊天室功能,包括用户登录、消息发送和接收等功能。 下面是一个简单的 ASP.NET、AJAX 和 WebSocket 聊天室示例: 1. 在 ASPX 页面中添加以下控件: ```html <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:TextBox ID="txtMessage" runat="server"></asp:TextBox> <asp:Button ID="btnSend" runat="server" Text="Send" OnClick="btnSend_Click" /> <asp:Label ID="lblMessages" runat="server"></asp:Label> </ContentTemplate> </asp:UpdatePanel> <cc1:WebSocketManager ID="WebSocketManager1" runat="server" OnMessage="WebSocketManager1_Message"></cc1:WebSocketManager> ``` 2. 在服务器端代码中处理 AJAX 和 WebSocket 请求: ```c# protected void btnSend_Click(object sender, EventArgs e) { // 处理 AJAX 请求 string message = txtMessage.Text; // TODO: 处理消息发送逻辑 lblMessages.Text += "You: " + message + "<br />"; } protected void WebSocketManager1_Message(object sender, WebSocketMessageEventArgs e) { // 处理 WebSocket 请求 string message = e.Message; // TODO: 处理消息接收逻辑 lblMessages.Text += "Other: " + message + "<br />"; } ``` 3. 在客户端代码中发送 AJAX 和 WebSocket 请求: ```javascript // 发送 AJAX 请求 function sendMessage() { var message = document.getElementById('txtMessage').value; PageMethods.SendMessage(message, onSuccess, onFailure); } function onSuccess(result) { // TODO: 处理 AJAX 响应 } function onFailure(error) { // TODO: 处理 AJAX 错误 } // 发送 WebSocket 请求 var webSocket = $find('<%= WebSocketManager1.ClientID %>').get_webSocket(); webSocket.send('Hello, World!'); ``` 4. 实现聊天室功能,例如用户登录、消息发送和接收等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值