个人网站新功能:聊天室

本文介绍了作者在个人网站上实现聊天室的过程,选择了WebSocket协议,并使用Netty作为服务器端框架。讨论了WebSocket相对于AJAX轮询的优势,以及Netty在互联网、游戏和大数据领域的应用。Netty采用Reactor主从多线程模型,系统通过Tomcat和Netty分别处理HTTP和WebSocket请求。用户登录后,通过WebSocket连接进行聊天,消息实时传递但缺乏历史记录保存。未来计划使用Redis缓存并保存聊天记录。
摘要由CSDN通过智能技术生成

之前在个人网站上预留了一个网页聊天室的功能,在这次寒假抽出了时间来完成。快速访问

简要记录一下网页聊天室的设计过程。

AJAX轮询

在设计之前一直纠结该使用何种方式来实现网页聊天室这个模块,最基本的想法是使用ajax来实现轮询,从而达到消息推送的目的,目前的很多网站也是通过这样的手段来实现推送技术。轮询是在特定的时间间隔(如每一秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这样传统的模式需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

WebSocket

HTML5定义的WebSocket协议,能够更好地节省服务器资源和带宽,并且能够更实时地进行通讯。

WebSocket是为了解决实时传送消息的问题,当然也可以传送数据,但是不保证传送的效率和质量,而WebRTC可用于可靠地传输音视频数据、文件等。并且可以建立P2P连接,不需要服务进行转发数据。虚拟电话、在线面试等现在很多都采用WebRTC来实现。

WebSocket并不是我们寻常意义上的基于TCP或者UDP协议的套接字,而是一个基于TCP的应用层协议,和HTTP协议工作在计算机网络的同一层;WebSocket其实就是,在TCP的基础上增加了一个协议,这个协议和TCP协议很想,也需要握手,挥手,发送大数据也要分包,也是按照位进行标识,但它并不是套接字,不是socket,socket工作在传输层,它工作在应用层。

浏览器通过JavaScript想服务器发出建立WebSocket连接的请求,连接建立后,客户端和服务器端就可以通过TCP连接直接交换数据。当获取到Web Socket连接后,可以通过send()方法来向服务器发送数据,并通过onmessage时间来接受服务器返回的数据。

JS代码如下:

<script type="text/javascript">
    var socket;
    if (!window.WebSocket) {
   
        window.WebSocket = window.MozWebSocket;
    }
    if (window.WebSocket) {
   
        socket = new WebSocket("ws://www.xpllyn.com:3333");
        socket.onope
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值