人教/中图版(2019)
第三章
3.3.3开发网络聊天系统
使用网络中的一些聊天室时,只要在浏览器中输入聊天室的网址,根据提示登录后就可以聊天了。下面开发一个简易的文字型网络聊天系统,这个系统的客户端用浏览器来担当。
要开发的信息系统功能很简单:客户端负责发送、接收信息,服务器负责把收到的信息转发给客户端。
明确系统结构
在本节的范例中,聊天系统将采用 WebSocket协议进行通信,绝大多数浏览器都已经支持这种协议,因而开发过程相对简单。如果需要,也可以采用其他协议进行开发。
明确系统结构
随着浏览器的功能越来越强,很多信息系统的客户端都已借助浏览器来实现,编写客户端软件的过程类似于编写网页。
通常,网页本身由HTML代码构成。HTML是 hypertext markup language的缩写,中文译为“超文本标记语言”。浏览网页时,浏览器软件根据代码进行布局图文、展示影像等操作。
开发客户端软件
项目实施
编写客户端软件
1.明确客户端软件应该具备的具体功能
_连接服务器_输入信息_发送信息_接收信息_显示接收的信息
2.参照下面的代码,用HTML编写或改写网页形式的客户端
项目实施
input id='host' valve=127.0,0.1) input> #服务器地
3.检查代码是否与书中一致,了解每段代码的功能,然后以 client .html为名保存起来
前面编写的网页文件中,在< script>和之间一段特殊的代码,编写这段代码使用的是 Javascript编程语言。这种语言可用来控制浏览器完成多种复杂操作。
具体来说,浏览器解析网页中的 Javascrip代码时,就会采用 WebSocket协议,连接服务器的8765端口.然后等待用户发出信息或等待接收服务器转发的信息。其中,定义变量ws的过程就是尝试建立连接的过程。 Ws.onmessge表示成功建立了通信连接, writeToScreen表示收到了从服务器传来的消息,它们都调用 writeToscreen方法把相关信息显示在网页上。代码中的send方法用于发送消息。
开发服务器和客户墙软件时,常常会根据两者不同的行环境,采用不同的语言。下面以 Python为例做介绍。
开发服务器软件
项目实施
编写服务器软件
1.明确聊天服务器的工作过程。服务器时刻不停地监听某个端口有信息传来时,就根信息做出相应的处理:或建立网络连接,或接收并转发传来的消息。
2参照下面的代码,编写Phyon程序。
#引入程库
Import websockets
import asyncio
#保存客户端
cs =set()
项目实施
async def talk(websocket, path);
Try;
while True;
if (not websocket in cs)#新的访问申请
cs.add (websocket)
msg=‘欢迎: ‘+str(websocket .renote_ address#新的聊天消息
Else;
Msg= str(websocket, remote address)+’说’+str(await websocket recv())
项目实施
await asyncio.wait(ws,send(msg) for ws in cs])#转发信息except Exception as err:
cs.remove( websocket)#移除客户端连接
#监听8765口
start _server = websockets. serve(talk,l’ocalhost’, 8765)
asyncio. get event loop().run_ until complete(start_ server)
asyncio. get event loop(). run _forever()
程序变量cs存放着所有连到服务器的客户端连接。运行时,这个软件会开放本地的8765端口,以 Websocket协议提供网络服务,随后所有的网络通信都在talk方法中进行处理。
程序中的talk方法采用了无限循环的方式,不断监听端口。如果有新的用户连入,就保存通信连接井用类似“欢迎”的内容通知其他用户;如果是新的聊天消息,就在消息前面加上发信人的网络地址,然后转发给所有人
编写这个 Python程序时,引入了两个重要的库:一个是名为 websockets的网络库,用于处理 Websocket网络协议,实现通信功能;一个是在服务器开发中经常会使用的名为asyncio的标准库,用于以异步模式处理信息。关于异步,后面会做简单介绍。
编写好客户端软件和服务器软件后,就可以把它们组合在一起,形成网络聊天系统了。
部署实施
项目实施
部署信息系统
1.调试、运行服务器软件,确保翟序正常运行
2.用浏览器软件打开网页文件,试试能否正常访问本地服务器
3.小组内运行修改后的服务器软件,并公布那台计算机的网络地址,然后同一网络中的其他人用计算机连接公布的服务器,尝试多人聊天。
提示: start _server =websockets.serve(talk, 'xxx. xxx. xxx. xxx, 8765)
实践活动
网络编程活动拓展
1.把同页文件传送到接入同一局城网的智能手机上,接着用手机上的览器打开网页,试一试能不能用手机参与聊天。
2.查阅相关资料并结合自己的实际编程体驗,讲一讲用编写网页这种方式设计客户端有什么好处,可能会有什么问题。
*
Thanks