多线程socket服务器端

本文介绍了一个使用 Python 编写的 Kafka 生产者模块,该模块能够接收 TCP 请求并将数据发送到 Kafka 集群指定的主题中。此外,还包括了一个简单的 SocketServer 示例,用于演示如何将接收到的数据转发到 Kafka。
import threading
import SocketServer
import json
import time
import  kafka
hosts="172.17.13.1:9092,172.17.13.10:9092"
topic='statis-baseinfo-serverevent'
class _KafkaMgrSingleton(type):
    def __init__(self, name, bases, dict):
        super(_KafkaMgrSingleton, self).__init__(name, bases, dict)
        self._instance = {}
    def __call__(self, hosts):
        if not self._instance.has_key(hosts):
            self._instance[hosts] = super(_KafkaMgrSingleton, self).__call__(hosts)
        return self._instance[hosts]
class KafkaMgr(object):
    "kafka操作类"
    __metaclass__ = _KafkaMgrSingleton
    def __init__(self,hosts):
        self.hosts=hosts
        self.client=kafka.KafkaClient(hosts,timeout=2851200)
        self.productor=kafka.SimpleProducer(self.client)
    def send_message(self,topic,*messages):
        messages=[(i if isinstance(i,str) else i.encode("utf-8")) for i in messages]
        return self.productor.send_messages(topic,*messages)
    def __del__(self):
        self.client.close()
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        start_time=time.time()
        print start_time
        data = self.request.recv(1024)
        jdata = json.loads(data)
        try:
            kafka=KafkaMgr(hosts)
            kafka.send_message(topic,data)
        except Exception as e:
            msg=e.message
        else:
            msg='success'

        # host=self.client_address
        # sub_thread = threading.current_thread()
        response = {'data':data,'message':msg}
        print response
        jresp = json.dumps(response)
        self.request.sendall(jresp)
        print 'count_time---',time.time()-start_time

if __name__ == "__main__":
    server=SocketServer.ThreadingTCPServer(('192.168.15.32',5000),ThreadedTCPRequestHandler)
    # ip, port = server.server_address
    print " .... waiting for connection"
    server.serve_forever()



转载于:https://my.oschina.net/u/1458120/blog/546765

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值