本文python源码为实现,Python WebSocket服务端编程代码完成gtalk机器人的全部代码段。需要用到python sys、sleekxmpp、reactor等python模块及方法,在代码中导入部分可以查看到详细方法。

python websocket库,运作机制及客户端和服务端的 API 实现。Python WebSocket的具体操作方法和工作原理也可以查看相关文章来学习。

import sys

from twisted.internet import reactor

from twisted.python import log

from autobahn.websocket import WebSocketServerFactory, WebSocketServerProtocol

import sleekxmpp

reload(sys)

sys.setdefaultencoding('utf8')

class gtalkBot(sleekxmpp.ClientXMPP):

"""

A basic SleekXMPP bot that will log in, send a message,

and then log out.

"""

def __init__(self, jid, password):

sleekxmpp.ClientXMPP.__init__(self, jid, password)

self.recipient = 'wxg4net@gmail.com'

self.status_text = ''

self.add_event_handler("session_start", self.start)

self.add_event_handler("message", self.muc_message)

self.add_event_handler('presence_available',

self.handle_presence_available)

self.add_event_handler('presence_unavailable',

self.handle_presence_unavailable)

self.add_event_handler('presence_dnd',

self.handle_presence_dnd)

def start(self, event):

self.send_presence()

self.get_roster()

def handle_presence_unavailable(self, presence):

if cmp(presence['from'].bare, self.recipient) == 0:

self.status_text = presence['status']

def handle_presence_available(self, presence):

if cmp(presence['from'].bare, self.recipient) == 0:

self.status_text = presence['status']

def handle_presence_dnd(self, presence):

if cmp(presence['from'].bare, self.recipient) == 0:

self.status_text = presence['status']

def muc_message(self, msg):

fwho = msg['from'].bare

body = msg['body']

if cmp(body,'-qsbk') == 0:

self.send_message(mto=fwho,

mbody='当前服务已关闭',

mtype='chat')

elif cmp(body,'-help') == 0:

self.send_message(mto=fwho,

mbody='当前服务开发中...',

mtype='chat')

elif cmp(fwho, self.recipient) == 0:

factory.broadcast(str(body))

else:

self.send_message(mto=fwho,

mbody='当前服务开发中...',

mtype='chat')

def sendMessageTome(self, message):

self.send_message(mto="wxg4net@gmail.com",

mbody=message,

mtype='chat')

#python websocket

class BroadcastServerProtocol(WebSocketServerProtocol):

def __init__(self):

self.istip = True

self.Heartbeat()

def Heartbeat(self):

reactor.callLater(1, self.Heartbeat)

def onOpen(self):

self.factory.register(self)

def onMessage(self, msg, binary):

xmpp.sendMessageTome(msg)

if self.istip:

self.sendMessage('你好,websocket python的当前状态是:'+str(xmpp.status_text)+'。---祝你生活愉快!')

self.istip = False

def connectionLost(self, reason):

WebSocketServerProtocol.connectionLost(self, reason)

self.factory.unregister(self)

class BroadcastServerFactory(WebSocketServerFactory):

protocol = BroadcastServerProtocol

def __init__(self):

WebSocketServerFactory.__init__(self)

self.clients = []

def register(self, client):

if not client in self.clients:

self.clients.append(client)

def unregister(self, client):

if client in self.clients:

self.clients.remove(client)

def broadcast(self, message):

if self.clients:

for c in self.clients:

c.sendMessage(message)

#www.iplaypy.com

if __name__ == '__main__':

1a58

log.startLogging(sys.stdout)

xmpp = gtalkBot("phzggzs@gmail.com", "*******")

xmpp.register_plugin('xep_0030') # Service Discovery

xmpp.register_plugin('xep_0199') # XMPP Ping

if xmpp.connect():

xmpp.process(threaded=True)

factory = BroadcastServerFactory()

reactor.listenTCP(9090, factory)

reactor.run()

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/c2700.html

相关文章 Recommend

python服务端编程_Python WebSocket服务端编程代码完成gtalk机器人相关推荐

  1. python套接字编程_Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 5. 常见的Python异步编程框架 6. 协程在Python网络编程中的使用 本文介绍Python下的基本套接字编程,主要基于 socket 模块 ...

  2. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  3. python fortran混合编程_python fortran c 混合编程

    背景 因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验.首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++ ...

  4. python 栈实现 加减乘除_Python自学笔记,编程中简单的加减乘除

    日常生活中,我们都会有过很多的加减乘数的基本运算.今天我们来看看Python这么编程语言,是怎么进行简单的基本运算的.废话不多说,我们开始吧开发工具:IDLE (Python 3.7 64-bit)这 ...

  5. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例

    Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...

  6. python控制结束多线程_python进阶八——并发编程之多线程

    1:线程介绍 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到 ...

  7. python极客项目编程_Python极客项目编程 ([美]Mahesh Venkitachalam) 中文pdf完整版

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务.Python极客项目编程通过14个有趣的项目,帮助和鼓励读者探索Python ...

  8. python概率编程_Python中的概率编程

    python概率编程 Learn about probabilistic programming in this guest post by Osvaldo Martin, a researcher ...

  9. python多线程控制暂停_python中的多线程编程与暂停、播放音频的结合

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

最新文章

  1. Poj(2488),按照字典序深搜
  2. 了解select模型的六大注意点
  3. oracle监听管理工具,oracle监听器管理
  4. 发条js调试工具_【转载】移动端js调试工具:eruda
  5. tidyverse —— readr包
  6. 计算机id和密码忘了怎么办,苹果平板电脑忘了ID号和密码怎么办?
  7. board crt_HTML5 CSS3 朋克风格的旧式CRT显示器
  8. 中职计算机公开课说课稿,(完整)中职职高幼教专业手工实践《剪纸(雪花)》公开课说课稿...
  9. VS 2013使用ReportViewer 提示An error occurred during local report processing异常处理
  10. MyBatis总结 Day01
  11. 程序员应该掌握的选择思维模式?
  12. NBA篮球英语专业术语
  13. Linux抓包工具:tcpdump
  14. Scintilla MFC使用教程
  15. 怎样用计算机做一个电子地图,电子地图如何制作简介-20210525123653.docx-原创力文档...
  16. 《用两天学习光线追踪》1.项目介绍和ppm图片输出
  17. js获取ID的一些技巧
  18. Bootstarp4总节(2)
  19. PROTAC——靶点选择与设计 | MedChemExpress
  20. 位运算(转自matrix67)

热门文章

  1. 关于奈奎斯特稳定判据应用中的理解
  2. 自动驾驶2020:跨越险阻,珠峰沿途好风景
  3. 产品读书《深泽直人》-设计
  4. 工薪阶层如何用5年理出100W?绝对实用方法
  5. 【Leetcode】276. Paint Fence
  6. [渝粤教育] 西南科技大学 编译原理与技术 在线考试复习资料2021版
  7. 职业选择测试发型软件,几款职业范发型,总有你喜欢的
  8. 《初窥“思维导图”》
  9. 软件测试中的需求管理及评审,软件测试需求管理办法
  10. PACS/RIS影像管理系统源码,采用VC++编程语言,提供三维图像后处理和算法