热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SimpleXMLRPC_Python聊天室II(SimpleXMLRPCServer模块实现)

并不是上一个用SocketServer的聊天室的延续。用远程调用完成的聊天室。正好有Java的RMI聊天室的作业,就先用Python写了一个简单的类似远程调用的东西&

并不是上一个用SocketServer的聊天室的延续。用远程调用完成的聊天室。

正好有Java的RMI聊天室的作业,就先用Python写了一个简单的类似远程调用的东西,逻辑完成之后,在Java上写一遍也是水到渠成的事。

Python没有RMI,但拥有一个SimpleXMLRPCServer模块。

原理和RMI类似,不过省去了定义接口和生成stub的过程,而且不仅支持调用远程对象,更支持调用远程函数。

下面的代码都只调用了远程函数。这点和RMI必须通过远程对象调用方法不同。

说起啦,Python算是个OO语言,但不像Java那样完全的OO,可以完全不用OO的方式来编写程序。

基本上下面的程序就是如此,而且相对简洁,同样的RMI下次贴上来,代码量就多了很多,而且注册,接口等一系列事情,很烦。

当然这个SimpleXMLRPCServer模块有个问题:敢不敢快一点!!!!!基本上读端有大概1秒的延迟,这个略显坑爹了。。

from SimpleXMLRPCServer import SimpleXMLRPCServer

# list to store the total message

ms=[]

# remote function

# each write client invoke this function to say something, and the message will be store in the ms list

def say(s):

ms.append(s)

# each read client invoke this function to get the latest message.

# args: message_no the total message number which this client has received.

def showMessage(message_no):

if message_no>=0:

mst=ms[message_no:] # always to get the latest message which client haven't received.

return mst

# create the XMLRPCServer

svr=SimpleXMLRPCServer(("", 8080), allow_none=True)

# regisrer functions

svr.register_function(say)

svr.register_function(showMessage)

# run server

svr.serve_forever()

from xmlrpclib import ServerProxy

svr=ServerProxy("http://localhost:8080") #connect to server

while True: #loop to get input

s=raw_input("Zhu Di:")

svr.say(s) #Remote invoking the server's function

from xmlrpclib import ServerProxy

# connect to server

svr=ServerProxy("http://localhost:8080")

# the message number which this client has recveied.

message_no=0

# remote invoking the function to show the latest message

while True:

ms=svr.showMessage(message_no)

if len(ms)>0:

for i in range(len(ms)):

print ms[i]

message_no+=len(ms)



推荐阅读
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
author-avatar
我财我乐汽车869
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有