1. 教学目标
·了解网络信息系统的开发过程,能开发、部署简易的文字型网络聊天系统。
·通过开发简易网络聊天系统,进一步理解软件在信息系统中的作用。
·体会服务器、客户机等不同的运行环境对开发信息系统不同软件的影响。
2. 教学对象分析
学生对用Python编写网络程序已经比较熟悉,为本节的学习做好了知识储备。在日常的学习生活中,绝大部分学生都使用过聊天室或聊天软件,对网络聊天并不陌生,具有分析聊天系统基本结构的能力。不过,信息系统的服务端对学生来说仍相当于一个“黑匣子”,神秘且具有探索的价值。
3. 教学重点与难点
教学重点:开发网络聊天系统 需要明确的基本要素,能借助软件工具与平台开发简易的文字型网络聊天系统。
教学难点:网络信息系统的部署与调试。
4. 教学方法与教学手段
采用项目式教学法,学生3到4人分为一组进行。建议用2课时完成教学任务:第1课时完成“系统结构分析”“客户端程序编写”“服务器端程序编写”等内容;第2课时完成“部署服务器”“功能扩展”“总结反思”等内容。
5. 教学过程设计
教学环节 | 教师活动 | 学生活动 | 设计意图 |
复习提问 | 从交流时效上看,与网络聊天的主要区别是什么? 是非实时的信息交流方式,网络聊天是实时的信息交流方式。 | ||
引入新课 | 前面我们依据已有的系统,开发了可以收发的应用程序。除了,人们还会使用一些实时的信息收发系统,包括QQ、、网络聊天室等。今天,我们就开始试着开发一个简易的文字型网络聊天系统。 | ||
项目实施1——明确系统结构 项目实施1——明确系统结构 | 开发系统之前,先来分析一下系统结构(图3.3-4)。在这个系统中,有多个参与实时交流的 客户端用户。如果用户1给用户2发信息,那么,用户1的信息是直接发送到用户2的终端设备上的吗? | ||
图3.3-4 网络聊天系统功能示意图 | |||
观察图3.3-4,明确以下信息。 ·系统主要包括服务器和客户端。 网络连接失败·系统面向的用户数:■ 多个用户 □ 单个用户 ·从客户端来看,系统的主要功能包括:接收、发送信息。 ·从服务器来看,系统的主要功能包括:接收、转发信息。 ·客户端主要运行环境:在浏览器中运行。 ·客户端软件:网页形式,可以随时停止使用。 ·服务器软件:必须不间断地工作。 ·聊天系统采用的网络 议:WebSocket协议。 教师引导: 系统功能分析清楚了,我们试着来开发系统,先从客户端开始。 | |||
项目实施2—— 开发客户端软件 | 教师引导:我们要开发的这个信息系统的客户端将借助浏览器来完成,所以编写客户端软 件的过程类似于编写网页。 明确客户端软件应该具备的具体功能。 ■ 连接服务器 ■ 输入信息 ■ 发送信息 ■ 接收信息 ■ 显示接收的信息 按照下面的代码,用HTML语言编写或改写网页形式的客户端。 【步骤1】 给学生发送有如下代码的文件。学生打开查看,教师解读。 <html> <input id='host' value='127.0.0.1'></input> <button onclick='con()'>连接</button> <br/><br/> <input id='msg'></input> <button onclick='send()'>??</button> <div id="output" ></div> </html> 教师解读代码,学生根据理解将“??”填写完整。填写“发送”。 以上代码负责展示网页中最基本的内容,要想完成复杂的操作,还需要编写JavaScript代码。 【步骤2】 将以下代码,粘贴到</html>前面。 <script> function con() #建立连接 { ws = new WebSocket("ws://"+host.value+":8765/") ws.onopen=function(evt){ writeToScreen("CONNECTED!")}; ws.onmessage=function(evt){ writeToScreen(evt.data);}; } function send() #发送信息 { } message=msg.value; ws.send(message); function writeToScreen(message) #显示信息 { var pre = ateElement("p"); pre.innerHTML = message; output.appendChild(pre); } </script> 教师解读:浏览器解析网页中的JavaScript代码时,就会采用WebSocket协议,连接服务器的 8765端口,然后等待用户发出信息或等待接收服务器转发的信息。不过,此时缺乏服务器端软件的支持,因此网页中的“连接”和“发送”按钮还都不能使用。 | ||
项目实施3——开发服务器软件 | 给学生发送有如下代码的文件。学生打开查看,教师解读。 #code=utf-8 import asyncio import websockets cs = set() async def talk(websocket, path): try: while True: print('123') <?1> (not websocket in cs): cs.add(websocket) msg='欢迎:'+_add ress); <?2>: msg=_address)+'说:'+str(v()); await asyncio.wait([ws.send(msg) for ws in cs]) except Exception as err: cs.remove(websocket); start_server=websockets.serve(talk,'localhost', 8765) _event_loop().run_until_complete(start_server) _event_loop().run_forever() 教师解读代码,学生根据理解将“<?1>”改成“if”,将“<?2>”改成“else”。 程序中的talk方法采用了无限循环的方式,不断监听端口。如果有新的用户连入,就保存通信连接并用类似“欢迎”的内容通知其他用户;如果是新的聊天消息,就在消息前面加上发信人的网络地址,然后转发给所有人。 | ||
项目实施4——部署聊天系统 | 服务器软件和客户端软件组合在一起,就组合成聊天系统啦。 【步骤1】 在自己所用的计算机上运行服务器软件,然后运行客户端软件,试试能否正常访问本地的 服务器。 【步骤2】 小组内运行修改后的服务器软件,并公布那台计算机的网络地址。 提示:start_server=websockets.serve(talk, 'x', 8765) 其他同学运行client.html客户端,然后把地址改为公布的服务器的地址,试着进入聊天室进行聊天。运行结果类似图3.3-5。 | ||
图3.3-5 网络聊天示意图 | |||
项目实施5——用移动端聊天(拓展) | 1. 手机若要参与刚刚开发的聊天系统,需要什么条件?如何实现? 2. 能否将开发的聊天系统和信息展示系统结合起来?如何实现? 3. 还能增加什么功能?如何实现? 通过问题形式,引导学生逐步完善软件的功能,进一步认识软件开发的过程。 | ||
总结、 反思 | 填写教科书第102页的项目实施报告,注意引导学生对网络协议的理解。 | ||
6. 相关资源
安装websockets编程库:pip install websockets。
发布评论