xmpp的python客户端

看了很多,不是很早不更新了,就是不支持gevent

最终选用了sleekxmpp

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# https://github.com/fritzy/SleekXMPP/tree/develop/examples

import sys
if "threading" in sys.modules:
        print ("threading module loaded before patching!", "xmppclient")
        del sys.modules["threading"]
from gevent import monkey; monkey.patch_all()

from gevent.queue import Queue
from sleekxmpp.util.misc_ops import setdefaultencoding; setdefaultencoding("utf8")
import sleekxmpp
import logging
import gevent

class XMPPClient(sleekxmpp.ClientXMPP):

    def __init__(self, jid, password, address):
        super(XMPPClient, self).__init__(jid, password)
        
        self.register_plugin("xep_0030") # Service Discovery
        self.register_plugin("xep_0004") # Data Forms
        self.register_plugin("xep_0060") # PubSub
        self.register_plugin("xep_0199") # XMPP Ping
        
        self.inbox = Queue()
        self.address = address
        self.job_send = None
        
        # 添加事件触发-启动触发
        self.add_event_handler("session_start", self.session_start, threaded=True)
        # 添加事件触发-收消息触发
        self.add_event_handler("message", self.message)
        
        if self.connect(address):
            self.process(block=False)
            print "xmpp connected"
            self.init()
        else:
            print "unable to connect."

    def session_start(self, event):
        """
        Arguments:
            event -- An empty dictionary. The session_start
                     event does not provide any additional
                     data.
        """
        self.send_presence()
        self.get_roster()

#         self.send_message(mto=self.target_jid,
#                           mbody="ooxx",
#                           mtype="chat")
        
    def message(self, msg):
        print msg["type"], msg["body"], msg["from"], msg["lang"]
#         if msg["type"] in ("chat", "normal"):
#             msg.reply("Thanks for sending\n%(body)s" % msg).send()
    
    def put_data(self, data):
        """发送消息函数
        @param data: (target_jid, mtype, msg)
        """
        self.inbox.put(data)
        
    def send_data(self):
        while True:
            data = self.inbox.get()
            target_jid, mtype, msg = data
            self.send_message(mto=target_jid, mbody=msg, mtype=mtype)
            
    def init(self):
        self.job_send = job_send = gevent.spawn(self.send_data)
        
        def _exit(glet):
            job_send.unlink(_exit)
            self.disconnect(wait=False)
        
        job_send.link(_exit)
        
    
if __name__ == "__main__":
    logging.basicConfig(level=logging.ERROR,
                        format="%(levelname)-8s %(message)s")
    
    xmpp = XMPPClient("[email protected]", "123456", ("the-xmpp-server-ip", 5222))
    xmpp.put_data(("[email protected]", "chat", "ooxx"))
    
    xmpp = XMPPClient("[email protected]", "123456", ("the-xmpp-server-ip", 5222))
    xmpp.put_data(("[email protected]", "chat", "xxoo"))
    
    gevent.wait()
时间: 2024-11-09 19:11:20

xmpp的python客户端的相关文章

Redis的Python客户端redis-py的初步使用

1. 安装 sudo pip install redis sudo pip install hiredis Parser可以控制如何解析redis响应的内容.redis-py包含两个Parser类,PythonParser和HiredisParser.默认,如果已经安装了hiredis模块,redis-py会使用HiredisParser,否则会使用PythonParser.HiredisParser是C编写的,由redis核心团队维护,性能要比PythonParser提高10倍以上,所以推荐使

centos 安装百度云/百度网盘Python客户端

通过pip来安装:pip install bypy (支持Python 2.7+, 3.3+) centos 6.5python版本为2.6的,这里我们先要安装python2.7 1.安装 sqlite-devel #yum install sqlite-devel -y 2.安装 Python 2.7 #wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz #tar xf Python-2.7.8.tgz #cd Pytho

xmpp 及时通讯客户端开发

做完了公司xmpp 及时通讯客户端   单人聊天  ,以及群聊 openfire 是通过xmpp协议. 而我们平常开始也就会借助到  smack 这个库  进行使用. 他很完美的封装了xmpp协议. 1.就是要把 openfire进行简单的2次开发,因为现在它反回来的消息 是不带  time  这个节点的.所以 要让其最起码反回1个 服务器时间的节点,这样对于 手机时间更改等各种问题,对于在手机上的聊天记录也是很重要的 2. 第三方客户数据库服务器集成. 3.离线的消息和文件这个基本不用想了.就

python客户端编程

上一篇说了最为底层的用来网络通讯的套接字.有很多基于套接字的一些协议,这些协议构成了当今互联网大多数客户服务器应用的核心 其实这些协议时在套接字上面的进一层封装用来完成特定的应用,这些应用主要包括: 文件传输(FTP, SCP 等) 阅读Usenet 新闻组(NNTP) e-mail 发送(SMTP) 从服务器上下载e-mail(POP3, IMAP)等等 这些协议的工作方式与之前在套接字编程中介绍的客户端/服务器的例子很像 因特网客户端?? 好吧,之前我们实现了两个机器的通信,那因特网呢?其实

中小企业openstack私有云布署实践【19 通过python客户端 启动实例时手工指定固定的IP地址】

还有一种创建方式 是使用py开发工具,调用openstackclient的方法进行创建实例 ,好处就是可随意指定我们要的虚拟机IP地址,需求的场景就是,某天我们需要主动分配一个比较熟知的IP用作某个服务组件 或者某天,你需要打包一个实例的快照,终止实例后,你想通过快照的方式将它恢复为原来的IP,可以使用以下方法. 以win7客户端为例. 先下载安装eclipse 安装 安装 eclipse 的python插件,插件安装方法可自行百度 本机,安装python2.7环境 安装完后,添加python到

ActiveMQ的PHP、Python客户端

ActiveMQ这款开源消息服务器提供了多语言支持,除了一般的Java客户端以外,还可以使用C/C++.PHP.Python.JavaScript(Ajax)等语言开发客户端.最近由于项目需要,需要提供PHP和Python的主题订阅客户端.这里作为总结,列出这两种语言客户端的简单安装和使用. 对于PHP和Python,可以通过使用STOMP协议与消息服务器进行通讯.在ActiveMQ的配置文件activemq.xml中,需要添加以下语句,来提供基于STOMP协议的连接器. <transportC

SmartFoxServer 2x的python客户端

最近在研究SmartFoxServer 2x,这是一个针对联网游戏的网络开发框架,服务端是基于java netty框架开发的,客户端支持flash,unity, ios, android(java), c++. 等等 就是不支持python 怎么可以少了python呢?于是我把Java的客户端反编译出来,参考着写了一个python 的实现 https://github.com/heliclei/PySmartFox2x 欢迎点赞-- 目前只实现了基本的协议解析,还不支持压缩和加密,只支持conn

使用Python客户端(redis-py)连接Redis--华为云DCS for Redis使用经验

使用Python连接Redis,需要先安装Python以及redis-py,以CentOS为例,介绍redis-py的客户端环境搭建. 第0步:准备工作 华为云上购买1台弹性云服务器ECS(我选了CentOS 6.3),一个分布式缓存实例(DCS for Redis),我选了个单机实例. 注意ECS和缓存实例配置相同的VPC和安全组,确保网络互通. 第1步:安装python和redis-py 如果系统没有自带python,可以使用yum方式安装. yum install python 下载并解压

RedisCluster 的 Java 和 Python 客户端 API 使用示例

这里的环境仍然采用 [Redis Cluster 的安装与配置] 中最终的集群配置环境,具体如下: 127.0.0.1:7000> cluster nodes 8868592d98d84b7cf5752cc0b97af4ac807d1a12 127.0.0.1:7007 slave bfc910f924d772fe03d9fe6a19aabd73d5730d26 0 1410882113063 8 connected f5bdda1518cd3826100a30f5953ed82a5861ed4