首页 理论教育 HTML5聊天系统开发指南

HTML5聊天系统开发指南

时间:2023-10-26 理论教育 版权反馈
【摘要】:下面将通过一个具体实例讲解在网页中使用jWebSocketTest框架进行通信的方法。在本实例中,通过一个利用jWebSocket服务器创建简单聊天室的案例的过程,进一步展示如何用jWebSocket服务器进行通信的客户端页面。在使用jWebSocket框架进行Socket通信的时候,当客户端处于非活动状态一段时间且该时间超出指定的timeout时间值后,服务器端将中止会话,将客户端与服务器端之间的连接关闭。在上述代码中,jWebSocketClient为一个jWebSocketjSONClient类的对象,通过该语句来启动一个KeepAlive计时器。

HTML5聊天系统开发指南

下面将通过一个具体实例讲解在网页中使用jWebSocketTest框架进行通信的方法。在本实例中,通过一个利用jWebSocket服务器创建简单聊天室的案例的过程,进一步展示如何用jWebSocket服务器进行通信的客户端页面。在此页面中有一个聊天室,用户可以在此页面中输入用户名后单击登录按钮登录聊天服务器,然后与其他已登录聊天服务器的用户进行文字聊天。在页面中还显示一个用户列表,当用户登录或退出聊天室时随时更新用户列表,显示当前登录到聊天室中的所有用户的用户名+“@”+该用户的客户端ID。

978-7-111-53392-4-Part03-115.jpg

实例文件chat.html的实现代码如下。

978-7-111-53392-4-Part03-116.jpg

978-7-111-53392-4-Part03-117.jpg

978-7-111-53392-4-Part03-118.jpg

978-7-111-53392-4-Part03-119.jpg

978-7-111-53392-4-Part03-120.jpg

978-7-111-53392-4-Part03-121.jpg

978-7-111-53392-4-Part03-122.jpg

在本实例中,在JavaScript脚本代码中用到了KeepAlive功能。在使用jWebSocket框架进行Socket通信的时候,当客户端处于非活动状态(客户端不向服务器端发出任何请求)一段时间且该时间超出指定的timeout时间值后,服务器端将中止会话,将客户端与服务器端之间的连接关闭。因为服务器端不能主动对客户端进行操作,所以通过指定超时时间来管理会话与连接是一种必需的管理机制。这样,客户端可以通过主动发送close令牌来向服务器端请求关闭客户端与服务器端的连接,服务器端也可以在指定的超时时间过去之后将其与一些由于网络原因而与服务器端意外断开连接(没有向服务器端发出关闭连接请求而被意外中断连接)的客户端之间的连接关闭,将被这些客户端占用的端口释放。如果没有这种超时管理机制,服务器端的端口将很快被用尽(因为得不到释放)。

超时管理机制是以客户端是否在指定时间范围内与服务器端进行交互操作为依据进行管理的,如果超出超时时间而客户端没有向服务器端发出任何请求,服务器端就结束会话,关闭连接。在某些特殊场合下(例如,在网页中展示较长篇幅的文章或其他流数据时),用户在较长时间内不再向服务器端发出任何请求,只是处于对文章或流数据进行阅读的状态中,这时尽管超出了超时限制,用户还是希望服务器端保持与客户端的连接。在这种情况下,可以让客户端每隔一段时间向服务器端自动发送一个ping令牌以声明自己处于活动状态,以确保服务器端不会结束会话,不会断开连接。服务器端也可以向客户端返回一个响应令牌,客户端根据这个响应令牌来确认服务器端与自己处于连接状态。客户端每隔一段时间自动发送ping令牌来声明自己处于活动状态的功能就叫KeepAlive功能。(www.xing528.com)

打开KeepAlive功能的代码如下所示。

978-7-111-53392-4-Part03-123.jpg

在上述代码中,jWebSocketClient为一个jWebSocketjSONClient类的对象,通过该语句来启动一个KeepAlive计时器。该计时器控制客户端每隔一段时间自动向服务器端发送一个ping令牌。如果执行该语句时KeepAlive计时器已经启动,则之前启动的KeepAlive计时器被自动停止,重新启动一个新的KeepAlive计时器,并且通过options参数对该计时器进行初始化工作。

在参数options中保存了如下几个可选参数,通过这些参数可以初始化KeepAlive计时器。

■options.interval:指定计时器的时间间隔,以毫秒为单位,参数值为整数类型的毫秒数。

■options.echo:指定服务器端是否需要向客户端返回响应令牌,参数值为布尔类型True或False。

■options.immediate:指定执行该语句后客户端是否立即发送第一个ping令牌,而不等待计时器的通知。

执行后的效果如图8-5所示。

978-7-111-53392-4-Part03-124.jpg

图8-5 执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈