python twisted聊天服务器

本文介绍了一个使用Twisted框架实现的简单聊天服务器,包括客户端连接、用户命名、消息广播等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor


class Chat(LineReceiver):


    def __init__(self, users):
        self.users = users
        self.name = None
        self.state = "GETNAME"


    def connectionMade(self):
        self.sendLine("What's your name?")


    def connectionLost(self, reason):
        if self.name in self.users:
            del self.users[self.name]


    def lineReceived(self, line):
        if self.state == "GETNAME":
            self.handle_GETNAME(line)
        else:
            self.handle_CHAT(line)


    def handle_GETNAME(self, name):
        if name in self.users:
            self.sendLine("Name taken, please choose another.")
            return
        self.sendLine("Welcome, %s!" % (name,))
        self.name = name
        self.users[name] = self
        self.state = "CHAT"


    def handle_CHAT(self, message):
        message = "<%s> %s" % (self.name, message)
        for name, protocol in self.users.iteritems():
            #if protocol != self:
            protocol.sendLine(message)


class ChatFactory(Factory):


    def __init__(self):
        self.users = {} # maps user names to Chat instances


    def buildProtocol(self, addr):
        return Chat(self.users)




reactor.listenTCP(90000, ChatFactory())
reactor.run()
"""
$ telnet 127.0.0.1 8123
 Trying 127.0.0.1...
 Connected to 127.0.0.1.
 Escape character is '^]'.
 What's your name?
 test
 Name taken, please choose another.
 bob
 Welcome, bob!
 hello
 <alice> hi bob
 twisted makes writing servers so easy!
 <alice> I couldn't agree more
 <carrol> yeah, it's great
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值